マクロ初心者なので、ChatGPTで言語をOpenOffice Basicに指定してマクロを組んでもらいました。
そのコードをLibreOffice7.6で実行すると「For Each file In files」の部分で、
「許可されない値またはデータ型.データの種類が一致していません。」というエラーが表示されました。
どう修正したら良いでしょうか。
「組んだ内容」
①ユーザーにフォルダパスとキーワードの入力を求める。
②フォルダ内のファイルを取得して、キーワードが含まれているか確認。
③含まれていたら、新規ファイル作成してそこに抽出する。
「コード」
Sub SearchAndExtractFiles()
Dim folderPath As String
Dim keyword As String
Dim foundFiles() As String
Dim foundCount As Integer
Dim i As Integer
' ユーザーからフォルダパスの入力を求める
folderPath = InputBox("フォルダパスを入力してください", "フォルダパスの入力")
If folderPath = "" Then
MsgBox "フォルダパスが入力されていません。", vbExclamation
Exit Sub
End If
' ユーザーからキーワードの入力を求める
keyword = InputBox("検索するキーワードを入力してください", "キーワードの入力")
If keyword = "" Then
MsgBox "キーワードが入力されていません。", vbExclamation
Exit Sub
End If
' フォルダ内のファイルを検索して、キーワードが含まれているファイルを抽出
foundCount = 0
Call SearchFilesInFolder(folderPath, keyword, foundFiles, foundCount)
' キーワードが含まれているファイルがあれば、新規ファイルに抽出する
If foundCount > 0 Then
Dim outputFilePath As String
outputFilePath = folderPath & "\ExtractedFiles.txt"
Dim outputFile As Object
outputFile = FreeFile()
Open outputFilePath For Output As outputFile
For i = 1 To foundCount
Print #outputFile, foundFiles(i)
Next i
Close outputFile
MsgBox "キーワードが含まれているファイルが見つかりました。" & Chr(10) & "抽出されたファイルは " & outputFilePath & " に保存されました。", vbInformation
Else
MsgBox "キーワードが含まれているファイルは見つかりませんでした。", vbInformation
End If
End Sub
Sub SearchFilesInFolder(folderPath As String, keyword As String, ByRef foundFiles() As String, ByRef foundCount As Integer)
Dim files As Object
Dim file As Object
Dim fileName As String
files = CreateObject("Scripting.FileSystemObject").GetFolder(folderPath).Files
For Each file In files
fileName = file.Name
If InStr(1, fileName, keyword, vbTextCompare) > 0 Then
foundCount = foundCount + 1
ReDim Preserve foundFiles(foundCount)
foundFiles(foundCount) = fileName
End If
Next file
End Sub