asp(vbscript)のエラーの原因は?

このQ&Aのポイント
  • 画面のHTML上で実行開始のボタンを押すと、書かれたSubプロシージャが走り、CSVファイル読み込みが始まります。しかし、ダイアログをOKで閉じるとスクリプトエラーが表示されます。
  • 原因は、If arrFields(1) = "あ" Thenの行でエラーが起きていることです。
  • エラーの内容は、CSVファイルの2列目が"あ"である場合に正解と表示し、それ以外の場合は不正解と表示する処理が問題となっていることです。
回答を見る
  • ベストアンサー

asp(vbscript)のエラー

プログラム初心者です。 教えてください。 以下の処理が書かれている 画面のHTML上で実行開始のボタンを押すと、 書かれたSubプロシージャが走り、CSVファイル読み込みが始まります。 正解、不正解の判定をするダイアログ表示されて、できている様なのですが、 そのダイアログをOKで閉じると 以下のスクリプトエラーが表示されます。 どのような原因のエラーなのか教えていただけないでしょうか? デバッグすると If arrFields(1) = "あ" Thenの行でエラーが起きているようです。 すみません。よろしくお願いします。 Sub syori (省略) Set objFile = objFSO.OpenTextFile(file_path, ForReading) Do While objFile.AtEndOfStream <> True strData(i) = objFile.ReadLine Data = strData(i) i = i + 1 arrFields = Split(Data,",") 'MsgBox arrFields(1) If arrFields(1) = "あ" Then MsgBox "正解" else MsgBox "不正解" end if (省略) Sub End

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

エラーが出てるならその内容書かなきゃ… http://www.kanaya440.com/contents/script/vbs/function/string/split.html Splitの結果が「要素数2以上の配列」にならない時に >arrFields(1) でインデックスのエラーになってるんじゃないですか? 極端に言うとDataの中にカンマが無ければ、arrFieldは要素数0か1になる。そうすると「インデックス1」は存在しないのでエラー。

関連するQ&A

  • 配列の中身の判別

    vbscript初心者です。 教えてください。 HTML内のボタンを実行するとonClick="sub_read()"で CSVファイル(TAB区切り)が読み込まれ 以下のスクリプトが走るのですが、 "型が一致しません"というエラーが表示されてしまいます。 ★マークの箇所が無ければエラーは無いのです。 すみません。 お願い致します。 <%@ Language = VBScript %> <script language=vbscript> Sub sub_read() Const ForReading = 1 Set objFSO = CreateObject("Scripting.FileSystemObject") 'ファイルのレコード数を取得 With objFSO.GetFile(file_path).OpenAsTextStream(8) row = .Line .Close End With ReDim Data(row) i = 1 Set objFile = objFSO.OpenTextFile(file_path, ForReading) Do While objFile.AtEndOfStream <> True      Datas(i) = objFile.ReadLine Data = Datas(i) i = i + 1 DataFields = Split(Data,chr(9)) ★If DataFields(1) = "ABC" Then For j = 0 To Ubound(DataFields) If j = 1 Then MsgBox arrayFields(j)  End If Next Loop ★End If objFile.Close End Sub </script>

  • ASP内で他のASPファイルを読み込む方法

    ASP内で別ファイル(A.html)を読み込みました。下記の通りです。 <% Set objA = Server.CreateObject("Scripting.FileSystemObject") Set objFile = objA.OpenTextFile("A.html", 1, False) If Err.Number > 0 Then Response.Write "Open Error" Else Do Until objFile.AtEndOfStream Response.Write objFile.ReadAll Loop End If objFile.Close %> 読み込みはできたのですが、問題なのはA.htmlにもASPの処理が書かれてて、その部分がそのままテキストとして表示されたのです。 このように表示されました↓ <% ASP %> 読み込んだ際に、A.htmlに書かれたASP処理も実行させるにはどうすればよいのでしょうか?

  • Vbscriptエラー

    vbでメッセージBOXを用いてプログラムを起動できるようにしたいのですがエラーが出てしまいます。「インデックスが有効範囲にありません。」 どこが間違っているのでしょうか? ーーーーーーー Dim objWShell Dim a Dim b a = MsgBox (" 「」を利用。"&Chr(13)&Chr(13)&_ "    「」?    "&Chr(13)&Chr(13)&Chr(13)&_ " ---------------------------- "&Chr(13)&_ "  お問い合わせください。" , vbYesNo,"「r」") ' MsgBox vbYes&"="&a If a = vbYes Then Set objWShell = CreateObject("WScript.Shell") b = WScript.Arguments(0) If b = 0 Then objWShell.Run "C:\Windows\System32\notepad.exe" ,vbNormalFocus,False ' End If End If ーーーーー

  • VBScriptでファイルからgoogle検索

    カレントディレクトリの.txtファイルを1行づつ読み込み、google検索したいのですが、ウィンドウが複数立ち上がってしまい1ウィンドウでタブで表示したいのですが上手くいきません。。と、テキストファイル名もタイトルタグで表示したいです。どなたかご存知でしたらご教授願います。以下、書きかけのソースになります。 ---------------------------------------------------------------------------------- use_ie Sub use_ie() 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト If Err.Number = 0 Then Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then For Each FLO In objFSO.GetFolder(objWshShell.CurrentDirectory).Files path = FLO.Path If Right(path, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(path, 1) Do While objFile.AtEndOfStream <> True Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True 'ie.Navigate "about:blank" 'ie.Document.Write "<title>path</title>" ie.Navigate "http://www.google.co.jp/" ',2048 '新規タブで開く waitIE ie ie.Document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 100 ' 検索ボタンクリック ie.Document.all("btnG").Click waitIE ie strURL = "https://www.google.co.jp/" If ie.LocationURL = strURL Then ie.Quit Set ie = Nothing End If Loop objFile.Close End If Next Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set ie = Nothing End Sub ' IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub

  • VBScriptで検索結果をタブ表示したいです。

    カレントディレクトリの.txtファイルを1行づつgoogle検索したいのですが、ウィンドウが複数立ち上がってしまい1ウィンドウでタブで表示したいのですが上手くいきません。。と、テキストファイル名もタイトルタグで表示したいです。どなたかご存知でしたらご教授願います。以下、書きかけのソースになります。 ---------------------------------------------------------------------------------- use_ie Sub use_ie() 'Option Explicit 'On Error Resume Next Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim objWshShell ' WshShell オブジェクト If Err.Number = 0 Then Set objWshShell = WScript.CreateObject("WScript.Shell") Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") If Err.Number = 0 Then For Each FLO In objFSO.GetFolder(objWshShell.CurrentDirectory).Files path = FLO.Path If Right(path, 4) = ".txt" Then Set objFile = objFSO.OpenTextFile(path, 1) Do While objFile.AtEndOfStream <> True Set ie = CreateObject("InternetExplorer.Application") ie.Visible = True 'ie.Navigate "about:blank" 'ie.Document.Write "<title>path</title>" ie.Navigate "http://www.google.co.jp/" ',2048 '新規タブで開く waitIE ie ie.Document.getElementById("q").Value = objFile.ReadLine WScript.Sleep 100 ' 検索ボタンクリック ie.Document.all("btnG").Click waitIE ie strURL = "https://www.google.co.jp/" If ie.LocationURL = strURL Then ie.Quit Set ie = Nothing End If Loop objFile.Close End If Next Else WScript.Echo "ファイルオープンエラー: " & Err.Description End If Else WScript.Echo "エラー: " & Err.Description End If Set objFile = Nothing Set objFSO = Nothing Set objWshShell = Nothing Set ie = Nothing End Sub ' IEがビジー状態の間待ちます Sub waitIE(ie) Do While ie.Busy = True Or ie.readystate <> 4 WScript.Sleep 100 Loop WScript.Sleep 1000 End Sub

  • ファイル書き込み

    out.csvファイルに追記していくにはどのように記述すればいいのでしょうか? アドバイス下さい。 Set objFSO = WScript.CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("c:\test.csv") 'objFile.ReadLine Do While Not objFile.AtEndOfStream StrLine = objFile.ReadLine MyString = split(StrLine,",") ' msgbox Mid(MyString(0),2,10) ' MyString = split(objFile.ReadLine,",") if Mid(MyString(0),2,10) = "(PDH-CSV 4" then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) msgbox "!!!" end if ' if Mid(MyString(0),2,10) = DateString then Set objWFile=objFSO.OpenTextFile("c:\out.csv",2,true) objWFile.write(StrLine) ' 'msgbox Mid(MyString(0),2,10) msgbox "???" end if loop objFile.close Set objFSO = Nothing Set objFile = Nothing

  • VBAコード実行を中止する方法は?(1プロシージャだけでなく)

    Exit Subは子だけしか中止できないのですね。 子でエラー起きたら、親もその他もまとめて中止することはできないのでしょうか? Sub 子()   Dim i As Integer   For i = 0 To 5     If 3 < i Then       '' ここで親も終了したい     End If     MsgBox i   Next End Sub Sub 親()   子   MsgBox "エラーならここまで来ないで" End Sub

  • [と”の意味を教えてください。

    http://okwave.jp/qa/q5945112.html を参考に、 Sub test1() Dim i As Integer i = 2 If i Like "[1-3]" Then MsgBox i & "です" End If End Sub Sub test2() Dim i As Integer i = 2 If i Like "[1-5]" Then MsgBox i & "です" End If End Sub Sub test3() Dim i As Integer i = 2 If i Like "[1-10]" Then MsgBox i & "です" End If End Sub を作ったのですが、 test3はうまく行きません。 意味としては、 iが "[1-10]"の中の数字の間のどれかであれば、 MsgBox i & "です" を表示させたいです。 でも上記のマクロを実行させた結果、 "[1-10]"の中で計算が行われてるのではないかと思います。 だから、test3は、1-10=-9 という事になり、msgboxが反応しないのではないかと思っています。 でもそうすると、test2だって "[1-5]"は、-4になって、i=2とは違う値なのに なぜMsgBoxが反応してしまうのかわかりません。 でもそもそも[と”の意味が分からないのでそこから教えていただけませんか? “の意味、は二つで挟んで文字列にすると思っています。

  • 「1から5の間なら」とするには?

    「1から5の間なら」とするには? エクセルvbaです。 Sub test1() Dim i As Integer i = 1 If i = 1 Or i = 2 Or i = 3 Or i = 4 Or i = 5 Then MsgBox "1-5までのどれかです" End If End Sub は、最大でも5なので手入力でできますが、 これが1から100までならor演算子で繋ぐのは大変なので Sub test2() Dim i As Integer i = 1 If i = [1-5] Then MsgBox "1-5までのどれかです" End If End Sub みたいなことをやりたいのですが、うまくいきません。 デバッグしてもエラーにもなりません。 自分でコードを書いといて聞くのもおかしいですがtest2の意味と、表題の方法を教えてください。 よろしくお願いします。

  • VBScriptでのファイルコピー

    こんにちは いつもお世話になります。 現在、「ファイルの指定ダイアログ」で選択されたファイルの中身(ファイル名) と「フォルダ指定ダイアログ(参照先)」で選択されたフォルダ(サブフォルダ含む) 内のファイルの名前を比較して、一致しているファイルを「フォルダ指定ダイアログ (保存先)」にコピーし、一致しないファイル名を同じく「フォルダ指定ダイアログ (保存先)」に出力するというツールを作成しています。 以下を実行させても、ファイルのコピーも出力もされないのですが、教えていただけます でしょうか。 宜しくお願い致します。 ---------------------------------------------------------------------- <html><head> <script language="VBScript"> 'Call Window.ResizeTo(500,200) Set objFso = CreateObject("Scripting.FileSystemObject") 'テキストファイル吐き出し場所 Const LIST_FILE = "C:\Documents and Settings\All Users\デスクトップ\NonFile.txt" '色々宣言 Dim objFso Dim inFolderName Dim outFolderName Dim inFileName Dim objTxIn Dim ListFile Dim CurrentFileName '色々定数 Const TristateTrue = -1 Const TristateFalse = 0 Const TristateUseDefault = -2 Const ForReading = 1 Const ForWriting = 2 Const ForAppending = 8 '参照フォルダをテキストに表示 '------------------------------------------------------------ sub inFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ifd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '保存先フォルダの選択 '------------------------------------------------------------ sub outFolder() Set objShell = CreateObject("Shell.Application") Set objFolder = objShell.BrowseForFolder( _ 0, "フォルダを選択してください", 0, "ssfDeskTop") If objFolder Is nothing Then 'MsgBox("フォルダを選択されませんでした。") Else pathFolder = objFolder.Items().Item().Path ofd.value = vbCr & pathFolder Set objFolder = nothing End If End sub '------------------------------------------------------------ Sub btn_onClick 'ファイルの有無チェック txOut="" inFileName = inFile.Value outFolderName = ofd.value If objFso.FileExists(inFileName) = True Then Set ListFile = objFso.OpenTextFile(inFileName,ForReading,false,TristateTrue) 'ファイルが無いとき Else MsgBox("ファイルが選択されていません。") End If Call iFolder(inFolderName) MsgBox("完了") End Sub 'サブフォルダ内ファイル検査→有 コピー/無 テキスト出力 '------------------------------------------------------------ Sub iFolder(inFolderName) CurrentFileName="" 'フォルダオブジェクト取得 outFolderName = ofd.value If inFolderName ="" then inFolderName = ifd.value Set fsoFolder = objFso.GetFolder(inFolderName) On Error Resume Next CurrentFileName = ListFile.ReadLine For Each fsoFile In fsoFolder.Files If fsoFile.Name = CurrentFileName Then fsoFile.Copy outFolderName,CurrentFileName,false Else set NoFile = objFso.CreateTextFile(LIST_FILE,True) NoFile.WriteLine(CurrentFileName) NoFile.Close End If fsoFile.Close Set fsoFile = Nothing Next For Each fsoSubFolder In fsoFolder.SubFolders Call iFolder(fsoSubFolder) Next End Sub </script> </head>

専門家に質問してみよう