ノーツのデータをVBScriptで取得しようとしております。
そのために, 次のスクリプトを書きました。
Set objNotes = CreateObject("Notes.Notessession")
databaseName = "xxxxxxx.nsf"
Set objDB = objNotes.GetDatabase("",databaseName)
universalID = "ffdecaef1b87c101c925656e000c02dc"
Set objDoc = objDB.GetDocumentByUNID(universalID)
If objDoc.HasItem("Subject") Then WScript.Stdout.Write("Yes"&vbCrLf)
itemValueList = objDoc.GetItemValue("Subject")
WScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
WScript.Stdout.Write(itemValueList(0)&vbCrLf)
Set objDoc = Nothing
Set objDB = Nothing
Set objNotes = Nothing
結果は
Yes
String()
C:\temp\notesvalue.vbs(9,1) Microsoft VBScript 実行時エラー: 型が一致しません。: 'itemValueList'
とGetItemValueの値を取得することができません。
上の例では, Subjectというアイテムを取得することにしていますが,
その他のItemでもだめでした。
ノーツのバージョンは4.6a
OSはWindows 2000 Professional
でございます。
識者の方, どうすればGetItemValueから有効な値を取得できるかお教えください。
よろしくお願いいたします。
No.1ベストアンサー
- 回答日時:
メッセージをそのまま受け取ると,
itemValueListが配列ではないにもかかわらず,
配列として扱っている(itemValueList(0)の部分)
からではないかと思われます。
単なる勘なんですけど,LotusScriptにおいて,
NotesDocumentクラスのGetItemValueの戻り値は
確かにString型の配列ですが,VBScriptで
暗黙的に型変換(文字列とか)されているのでは。
試しに7行目itemValueList = objDoc.GetItemValue("Subject")
の後に,Msgbox(IsArray(itemValueList))で確認して
みて下さい。(配列であればTrueが返るはずです)
またMsgbox(itemValueList)などとして,中身をが改行や
コロンで区切られた文字列リストであれば,Splitで配列を
作成してやればよいかもしれません。
っつーか,Subjectのアイテム数が1つだけ(配列ではない)
ことが確実であれば,そのまま
WScript.Stdout.Write(itemValueList&vbCrLf)とか
できないんでしたっけ?
↑Stdout.Write使った事ないんで,かなりテキトーです。
参考までにWScript.Stdout.Write(TypeName(itemValueList)&vbCrLf)
が何を標準出力に送信してるか教えて頂けると嬉しいです。
回答ありがとうございます。こんなややこしいことに回答いただけて本当にうれしいです。
Msgbox(IsArray(itemValueList))
はTrueが返ってきたので配列だとわかりました。
Msgbox(itemValueList)は, "実行時エラー: 型が一致しません。"と怒られてしまいました。やっぱりこいつが何かの原因と思われてしかたありません。
TypeName(itemValueList)の値は, String()でした。
文字列の配列ですね...
補足ですが, itemValueListのUBoundとLBoundは共に0でした...
ついでですが, WScript.Stdout.Writeを使うと, cscriptと打って, コマンドラインから使わなくてはいけませんが, 大量に表示しなくてはいけない場合が私の場合多くあって, MsgBoxだと苦痛なのです。OKを何回も押さなくてはいけないので...
No.2
- 回答日時:
ありー だめですか。
んじゃワンクッションおいて
itemValue = itemValueList(0)
Msgbox(itemValue)
なんてのはだめでしょうか。
相変わらず役立たずですみません。
itemValue = itemValueList(0)
のところでエラーを出力されてしまいました。
自己レスになってしまいますが,
私も質問後にあっちへこっちへ検索していると, VBScriptで配列をOLEから受け取るときはVariant型の配列でないとだめよ, という記述を見つけました。GetItemValueの型はString()となっているので, おそらくLotus側でString()ではなく, Variant型で返すように変更しないといけないのでしょう... とはいってもそれは無理なので, VBScriptでの取り出しはとりあえずあきらめて別の手段を探します。
お付き合いいただき, 本当にありがとうございました!!
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
- Visual Basic(VBA) excel vbaでvlooupの変数がわかりません。 7 2022/05/30 09:35
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) エクセルVBAのコードで質問です。 下のコードはJ16の文字列をB3を起点とする範囲から探して、見つ 5 2023/04/07 11:07
- Visual Basic(VBA) vbaを早くしたい 5 2022/09/09 10:58
- Excel(エクセル) フォルダ内のワードファイルをPDFに一括変換するVBA 3 2023/06/09 16:51
- Visual Basic(VBA) Excel vbaについての質問 3 2023/04/18 16:14
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
エクセルで、絶対値の平均を算...
-
[エクセル]連続する指定範囲か...
-
配列のSession格納、及び取得方...
-
[VBA]改行入りのセルの値を配列...
-
表にフィルターをかけ、絞った...
-
DataSetから、DataTableを取得...
-
VBA listBoxについて
-
iniファイルのキーと値を取得す...
-
配列がとびとびである場合の書き方
-
Split関数でLong配列に格納する...
-
エクセルの行の削除を配列で高...
-
エクセル 条件を指定した標準...
-
VB6.0 ファイルの一括読込み
-
構造体を使った時刻表(C)
-
SUMPRODUCT関数を用いた最小値
-
【VBA】ユーザーフォーム リス...
-
文字列の検索と比較
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
Excelのセルの色指定をVBAから...
-
array関数で格納した配列の型を...
-
ExcelのINDEXとMATCH関数でスピ...
-
[エクセル]連続する指定範囲か...
-
エクセルで、絶対値の平均を算...
-
VBA listBoxについて
-
配列がとびとびである場合の書き方
-
表にフィルターをかけ、絞った...
-
VBA 配列に格納した値の平均の...
-
[VBA]改行入りのセルの値を配列...
-
エクセルでエラーを無視して一...
-
iniファイルのキーと値を取得す...
-
二次元配列の中の各行の要素を...
-
SUMPRODUCT関数を用いた最小値
-
【VBA】ユーザーフォーム リス...
-
Split関数でLong配列に格納する...
-
【VBA】配列に数式を仕込む方法...
-
.NET - 配列変数を省略可能の引...
-
スプレットシートのGetTextにつ...
-
Excelのオートフィルタで抽出し...
おすすめ情報