質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.31%
OpenOffice Basic

OpenOffice Basicとは、Apache OpenOfficeの作業を自動化するプログラミング言語。Apache OpenOfficeは、オープンソースで開発されているオフィススイートの名称もしくはその制作プロジェクトの総称です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

Q&A

1回答

410閲覧

LibreOffice7.6 calcのマクロについて

mana___

総合スコア0

OpenOffice Basic

OpenOffice Basicとは、Apache OpenOfficeの作業を自動化するプログラミング言語。Apache OpenOfficeは、オープンソースで開発されているオフィススイートの名称もしくはその制作プロジェクトの総称です。

VBA

VBAはオブジェクト指向プログラミング言語のひとつで、マクロを作成によりExcelなどのOffice業務を自動化することができます。

0グッド

0クリップ

投稿2024/05/28 07:33

【実現したいこと】
①ユーザーにフォルダパスとキーワードの入力を求める。
②指定のフォルダを開き、フォルダの中に入っているファイルを開き、
ファイル内に指定のキーワードが含まれているか確認。
③含まれていたら別でまとめて書き出す。

【質問内容】
ChatGPTでOpenOffice Basicで【実現したいこと】の内容でマクロを組んでもらいました。
結果は以下の【ソースコード】に記載してます。
【ソースコード】の内容でマクロを実行したら、エラーは表示されず完了できるのですが、
指定したキーワードが含まれているはずなのに、結果ファイルの生成がされないと思ってまして…
Cドライブ直下にtestというフォルダを作成し、その中に「1,2,3,11」と4つのテキストファイルを作成しました。
テキストの中身の内容も「1,2,3,11」と同じにしてます。
マクロを実行し、パスは「C:\test」、キーワードは「1」、結果の保存先のパスを「C:\test\result」にしてOKをして
「検索が完了しました。」と表示後、「C:\test\result」の中に指定したキーワードが含まれていれば
ファイルが生成される認識だったのですが、何も生成されなくて…
どう修正したら良いでしょうか。

【ソースコード】

OpenOffice

1Option VBASupport 1 2 3Sub SearchFilesForKeyword() 4 Dim sFolderPath As String 5 Dim sKeyword As String 6 Dim sResultPath As String 7 Dim oFileSystem As Object 8 Dim oFolder As Object 9 Dim oFile As Object 10 Dim oTextFile As Object 11 Dim sFileContents As String 12 13 ' ユーザーにフォルダパスの入力を求める 14 sFolderPath = InputBox("検索するフォルダのパスを入力してください:", "フォルダパスの入力") 15 If sFolderPath = "" Then Exit Sub ' キャンセルされた場合は終了 16 17 ' ユーザーにキーワードの入力を求める 18 sKeyword = InputBox("検索するキーワードを入力してください:", "キーワードの入力") 19 If sKeyword = "" Then Exit Sub ' キャンセルされた場合は終了 20 21 ' ユーザーに結果の保存先のパスの入力を求める 22 sResultPath = InputBox("結果の保存先のパスを入力してください:", "結果保存先のパスの入力") 23 If sResultPath = "" Then Exit Sub ' キャンセルされた場合は終了 24 25 ' フォルダが存在するか確認 26 Set oFileSystem = CreateObject("Scripting.FileSystemObject") 27 If Not oFileSystem.FolderExists(sFolderPath) Then 28 MsgBox "指定されたフォルダが見つかりません。", vbExclamation, "エラー" 29 Exit Sub 30 End If 31 32 ' フォルダを開く 33 Set oFolder = oFileSystem.GetFolder(sFolderPath) 34 35 ' フォルダ内のファイルを検索 36 For Each oFile In oFolder.Files 37 ' テキストファイルのみ処理 38 If LCase(Right(oFile.Name, 4)) = ".txt" Then 39 ' ファイルを開く 40 Set oTextFile = oFileSystem.OpenTextFile(oFile.Path, 1) 41 sFileContents = oTextFile.ReadAll 42 oTextFile.Close 43 44 ' キーワードが含まれるかチェック 45 If InStr(1, sFileContents, sKeyword, vbTextCompare) > 0 Then 46 ' キーワードが含まれている場合は結果ファイルに書き出す 47 Dim oResultFile As Object 48 Set oResultFile = oFileSystem.OpenTextFile(sResultPath & "\" & oFile.Name, 8, True) 49 oResultFile.Write sFileContents 50 oResultFile.Close 51 End If 52 End If 53 Next oFile 54 55 MsgBox "検索が完了しました。", vbInformation, "完了" 56 57End Sub

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

どうやら、Scripting.FileSystemObjectがCalcのスクリプトでは、完全に使えるわけではないようですね。

ChatGPTに聞くときに「Scripting.FileSystemObject」を使わない方法で。という条件を付けたりしたらいいのかもしれませんね。

また、使える部分だけ使うように修正するのも、可能ではあると思います。
試しでファイル名の取得をDir関数に置き換えてみました。

CALC

1 strResult = Dir(oFileSystem.BuildPath(sFolderPath,"*.*")) 2 Do While strResult <> "" 3 Set oFile=oFileSystem.GetFile(oFileSystem.BuildPath(sFolderPath,strResult)) 4 5 ' テキストファイルのみ処理 6 If LCase(Right(oFile.Name, 4)) = ".txt" Then 7 ' ファイルを開く 8 Set oTextFile = oFileSystem.OpenTextFile(oFile.Path, 1) 9 sFileContents = oTextFile.ReadAll 10 oTextFile.Close 11 12 ' キーワードが含まれるかチェック 13 If InStr(1, sFileContents, sKeyword, vbTextCompare) > 0 Then 14 ' キーワードが含まれている場合は結果ファイルに書き出す 15 Dim oResultFile As Object 16 Set oResultFile = oFileSystem.OpenTextFile(sResultPath & "\" & oFile.Name, 8, True) 17 oResultFile.Write sFileContents 18 oResultFile.Close 19 End If 20 End If 21 22 strResult = Dir() 23 Loop

一応動きはしました。

投稿2024/05/31 11:56

xail2222

総合スコア1525

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.31%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問