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

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

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

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

Q&A

解決済

1回答

469閲覧

フォルダ内のPDFページ数とファイル名を抽出について

nocci

総合スコア11

VBA

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

0グッド

0クリップ

投稿2024/05/24 05:39

編集2024/05/24 05:58

実現したいこと

MACでフォルダ内のPDF総数とファイル名をエクセルに転記したい(VBA使用) 

発生している問題・分からないこと

ChatGPTを使って下記のコードでマクロを登録したのですがエラーが出て動かないです。イメージ説明

該当のソースコード

Sub ListPDFFiles() Dim folderPath As String Dim pdfCount As Long Dim fileNames As Variant Dim i As Long ' フォルダのパスを指定 folderPath = "/Users/ 〇〇〇〇/Desktop/テスト" ' ここにPDFファイルが保存されているフォルダのパスを入力してください ' フォルダパスの確認 If Right(folderPath, 1) <> "/" Then folderPath = folderPath & "/" End If ' AppleScriptでフォルダ内のPDFファイル名を取得 fileNames = Split(MacScript("tell application ""Finder"" " & _ "set theFolder to POSIX file """ & folderPath & """ as alias " & _ "set pdfFiles to every file of theFolder whose name extension is ""pdf"" " & _ "set pdfNames to name of every file of pdfFiles " & _ "return pdfNames as string " & _ "end tell"), ", ") ' PDFファイル数を取得 pdfCount = UBound(fileNames) + 1 ' 結果をエクセルシートに書き込む ThisWorkbook.Sheets(1).Cells(1, 1).Value = "PDF File Name" ThisWorkbook.Sheets(1).Cells(1, 2).Value = "Index" For i = LBound(fileNames) To UBound(fileNames) ThisWorkbook.Sheets(1).Cells(i + 2, 1).Value = fileNames(i) ThisWorkbook.Sheets(1).Cells(i + 2, 2).Value = i + 1 Next i ' 総PDFファイル数をエクセルシートに書き込む ThisWorkbook.Sheets(1).Cells(i + 3, 1).Value = "Total PDF Count" ThisWorkbook.Sheets(1).Cells(i + 3, 2).Value = pdfCount End Sub

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

よくわかりませんでした。。

補足

ここの部分でエラー起こしているようです

' AppleScriptでフォルダ内のPDFファイル名を取得
fileNames = Split(MacScript("tell application ""Finder"" " & _
"set theFolder to POSIX file """ & folderPath & """ as alias " & _
"set pdfFiles to every file of theFolder whose name extension is ""pdf"" " & _
"set pdfNames to name of every file of pdfFiles " & _
"return pdfNames as string " & _
"end tell"), ", ")

どなたかお詳しいからご教示いただけたらと思います。
よろしくお願いいたします。

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

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

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

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

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

CHERRY

2024/05/24 06:12

Mac でお使いの Office のバージョンは、いくつでしょうか? MacScript は、MacScript 関数 ( https://learn.microsoft.com/ja-jp/office/vba/language/reference/user-interface-help/macscript-function ) に「この関数は廃止され、サポートされなくなりました。 詳細については、こちらの Stack Overflow に関する記事を参照してください。」とありますので、最近のバージョンには存在しないみたいです。 コードを見た感じでは、Apple Script を実行しているようですので、 「VB を使用して AppleScript を実行する ( https://learn.microsoft.com/ja-jp/office/vba/office-mac/applescripttask ) 」に記載されているように 「AppleScriptTask」にコードを書き換えて変更する必要があると思います。
nocci

2024/05/24 06:57

お答えいただいたのにすみません、 他のやり方でうまく行きました。
can110

2024/05/24 07:14

> 他のやり方でうまく行きました。 解決おめでとうございます! 解決方法をまとめて、「自己解決」として回答してください! 同じように困っている人の貴重な情報になると思います。
guest

回答1

0

ベストアンサー

MACでフォルダ内のPDF総数とファイル名をエクセルに転記したい(VBA使用)

あいにく Mac の環境がないので検証不能ですが、とりあえず Dir 関数の仕様を踏まえた上で当てずっぽうなコードを記述した場合。

vba

1Sub Test1() 2 3 Dim strTargetFolderPath As String 4 5 strTargetFolderPath = "/Users/ 〇〇〇〇/Desktop/テスト" 6 7 If Dir(strTargetFolderPath, vbDirectory) = "" Then 8 MsgBox "フォルダ " & strTargetFolderPath & " が見つかりません。", _ 9 vbExclamation, _ 10 "フォルダ参照エラー" 11 Exit Sub 12 End If 13 14 strTargetFolderPath = strTargetFolderPath & _ 15 Application.PathSeparator 16 17 Dim wsDestination As Excel.Worksheet 18 Dim strFileName As String 19 Dim lngRow As Long 20 Dim lngFileCount As Long 21 22 Set wsDestination = Workbooks.Add.Worksheets(1) 23 24 With wsDestination 25 .Cells(1, 1).Value = "検索対象フォルダ:" 26 .Cells(1, 2).Value = strTargetFolderPath 27 28 lngRow = 3 29 .Cells(lngRow, 1).Value = "番号" 30 .Cells(lngRow, 2).Value = "ファイル名" 31 32 strFileName = Dir(strTargetFolderPath, MacID("PDF ")) 33 34 Do Until strFileName = "" 35 lngRow = lngRow + 1 36 lngFileCount = lngFileCount + 1 37 .Cells(lngRow, 1).Value = lngFileCount 38 .Cells(lngRow, 2).Value = strFileName 39 strFileName = Dir() 40 Loop 41 42 .Cells(lngRow + 2, 1).Value = "ファイル件数:" 43 .Cells(lngRow + 2, 2).Value = lngFileCount 44 45 .UsedRange.EntireColumn.AutoFit 46 47 End With 48 49 Set wsDestination = Nothing 50 51End Sub

投稿2024/05/24 06:34

sk.exe

総合スコア1059

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

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

nocci

2024/05/24 06:56

お答えいただいたのにすみません、 他のやり方でうまく行きました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問