
VBScriptのプログラムについて、
質問させてください。
以下のコードで、テキストファイルから任意の文字列を抽出し、
必要に応じて変換し、別名のテキストファイルを作成しています。
Option Explicit
'引数の取得
Function GetArg()
Dim objParm
GetArg = ""
Set objParm = Wscript.Arguments
If objParm.Count = 0 Then
WScript.Echo "引数が指定されていません。"
ElseIf objParm.Count >= 2 Then
WScript.Echo "2つ以上のファイルが指定されています。"
Else
GetArg = objParm(0)
End If
End Function
'文字列入力
Function Search(Msg)
Search = InputBox(Msg, "整形処理")
If IsEmpty(Search) Then
MsgBox ("キャンセルされました。")
Search = ""
ElseIf Search = "" Then
MsgBox "文字列が入力されていません。" & vbCr _
& "入力し直してください。", vbOKOnly, "Error"
Search = ""
ElseIf Search = " " or Search = " " Then
MsgBox "空白が入力されています。" & vbCr _
& "入力し直してください。", vbOKOnly, "Error"
Search = ""
End If
End Function
'メイン処理
Const ForReading = 1, ForWriting = 2, ForAppending = 8
Dim strFile, strSearch, strChange, strMsgBox
Dim objFSO, strText, objRead, objWrite, strNewText
Dim lonDate, strWork, strBuffer
strFile = GetArg()
If strFile = "" Then
WScript.Quit
End If
Set objFSO = CreateObject("Scripting.FileSystemObject")
If LCase(objFSO.GetExtensionName(strFile)) <> "txt" Then
MsgBox "テキストファイル以外が指定されています。" & vbCr _
& "指定し直してください。", vbExclamation, "Error"
WScript.Quit
End If
strSearch = Search("抽出したい文字列を入力してください。")
If strSearch = "" Then
WScript.Quit
End If
strMsgBox = MsgBox("『" & strSearch & "』" & "を抽出します。" & vbCr _
& "変換しますか?", vbYesNo + vbQuestion, "確認")
If strMsgBox <> vbYes Then
MsgBox ("変換をスキップします。")
Else
strChange = Search("どの文字列に変換しますか?")
End If
Set objRead = objFSO.OpenTextFile(strFile, 1)
strBuffer = ""
Do Until objRead.AtEndOfStream = True
strText = objRead.ReadLine
If InStr(1, strText, strSearch, vbTextCompare) > 0 Then
If strMsgBox <> vbYes Then
strWork = strText
Else
strWork = Replace(strText, strSearch, strChange, vbTextCompare)
End If
strBuffer = strBuffer & strWork & vbCrLf
End If
Loop
objRead.Close
Set objRead = Nothing
If strBuffer <> "" Then
lonDate = "_" & Year(Now()) & right( "00" & Month(Now()),2) & right( "00" & Day(Now()),2)
strNewText = objFSO.BuildPath( _
objFSO.GetParentFolderName(strFile), _
objFSO.GetBaseName(strFile) & _
lonDate & "." & objFSO.GetExtensionName(strFile))
Set objWrite = objFSO.OpenTextFile(strNewText, 2, True)
objWrite.Write(strBuffer)
objWrite.Close
Else
MsgBox "『" & strSearch & "』" & "が見つかりませんでした。"
WScript.Quit
End If
Set objWrite = Nothing
Set objFSO = Nothing
If objFSO.FileExists(strNewText) = True Then
WScript.Sleep 1000
MsgBox ("文字列の抽出が完了しました。")
Else
MsgBox ("文字列の抽出が失敗しました。")
End If
最後に作成されたテキストファイルの存在有無の
処理を追加したく、修正しました。
110行目の1文字目でオブジェクトがありません、
とエラーが出てしまいました。
strNewTextは存在していますし、正常に処理されると
想定していたのですが、どこが誤っていますでしょうか?
どのように修正すれば、想定の動作になりますでしょうか?
恐れ入りますが、ご教示いただけますと幸いです。
A 回答 (1件)
- 最新から表示
- 回答順に表示
No.1
- 回答日時:
>>Set objFSO = Nothing
108行目でオブジェクトを破棄しているのに
>>If objFSO.FileExists(strNewText) = True Then
110行目でファイルシステムオブジェクトを使用しようとしているので、エラーになります。
なので、下記のように破棄処理を最後に持ってくればいいと思います。
If objFSO.FileExists(strNewText) = True Then
WScript.Sleep 1000
MsgBox ("文字列の抽出が完了しました。")
Else
MsgBox ("文字列の抽出が失敗しました。")
End If
Set objWrite = Nothing
Set objFSO = Nothing
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Visual Basic(VBA) VBAが止まります。 3 2022/08/31 14:09
- Visual Basic(VBA) 【追加】ファイルを閉じてダイアログで保存した時だけ処理の実行をする 3 2022/03/23 15:43
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) オブジェクトが見つかりません 1 2023/06/24 19:43
- Visual Basic(VBA) VBAの繰り返し処理について教えてください。 3 2022/08/02 13:21
- Visual Basic(VBA) 実行時エラー´5854´ 文字列型パラメーターが長すぎます。 3 2023/06/08 21:17
- Visual Basic(VBA) VBAのユーザーフォームのテキストボックスに入力制限をしたい 6 2022/11/15 08:28
- Visual Basic(VBA) excel2021で実行できないマクロ。どこを直したらいいのか 2 2022/03/28 03:40
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- Visual Basic(VBA) [Excel VBA] このコードでは行の挿入や行の消去をすると13のエラーが出てしまう。 3 2022/12/09 00:29
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
【Excel VBA】複数ある特定の文...
-
Excelで3E8を3.00E+8にしない方...
-
変数内に入った文字列の結合 UWSC
-
Left関数とRight関数を合わせた...
-
VBAでの Replace関数で、ワイル...
-
エクセルでセル内の文字列の最...
-
文字列からタブコードを取り除...
-
VBA2005 16進を2桁で表示したい。
-
Excelで指数表現しないようにす...
-
LEFT関数で文字数を指定しない...
-
同一セル内に関数と文字列を同...
-
MS SQLServer のSQLで文字列の...
-
fgets()の仕組みについてくわし...
-
PowerShellでの文字列置換がで...
-
エクセルで文字列の最大値を抽...
-
【Teratermマクロ】文字列の分...
-
Pro c/c++ でホスト変数の後に....
-
C#で年月を比較する
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルでアルファベットか数...
-
EXCELで=より左の文字を一括で...
-
文字列からタブコードを取り除...
-
VBAでの Replace関数で、ワイル...
-
【Excel VBA】複数ある特定の文...
-
Excelで3E8を3.00E+8にしない方...
-
エクセルで文字列をtxtファイル...
-
エクセルで文字列の最大値を抽...
-
VBA2005 16進を2桁で表示したい。
-
Excelで指数表現しないようにす...
-
エクセル 数値データを桁をそ...
-
同一セル内に関数と文字列を同...
-
Left関数とRight関数を合わせた...
-
MS SQLServer のSQLで文字列の...
-
Msgboxの×が押されたとき
-
ORCLEでの小数の表示方法の変更...
-
textboxユーザーコントロールの...
-
VBの「As String * 128」とは?
-
Pro c/c++ でホスト変数の後に....
-
変数内に入った文字列の結合 UWSC
おすすめ情報