Option Explicit Sub DispArray(list As Variant, Optional isCrLf As Boolean = False) Dim i As Long For i = LBound(list) To UBound(list) '配列の全要素を取得 If (isCrLf) Then Debug.Print list(i) '区切り文字 vbCrLf だとFormat付き表示が乱れるため Else '1行ずつ、「イミディエイト」ウィンドウへ Debug.Print 表示 Debug.Print ("list[" & Format(i, "000") & "]= " & list(i)) End If Next End Sub Sub GetClipBoard() 'クリップボードに格納したテキストデータを取得&表示 Dim list() As String '「パスorファイル名」格納用として「文字列の配列」を定義 Dim ClipBoard As Variant Dim dataObj As MSForms.DataObject 'VBAがクリップボードとやり取りをするための「橋渡し役」 ClipBoard = Application.ClipboardFormats If ClipBoard(1) = True Then MsgBox "クリップボードは空です。", vbExclamation Set ClipBoard = Nothing Exit Sub Else 'クリップボード形式は「UTF-8 CrLf テキストデータ」のため、テキストエディタにも貼付可能 ActiveSheet.Cells.Clear 'アクティブシートの全データクリア ActiveSheet.Paste Destination:=Range("A1") ' A1,A2,A3, ... の順にペースト On Error GoTo myError ' マクロVBAを中断せず再実行すると、動作するため Set dataObj = New MSForms.DataObject 'DataObjectインスタンスを生成 With dataObj .GetFromClipboard 'クリップボードからDataObjectにデータを取り込む list = Split(.GetText, vbCrLf) '.GetText:DataObjectのデータ、区切り文字 vbCrLf End With 'Excelのセル内改行コードは vbLf のため、区切り文字 vbLf は利用不可! Call DispArray(list, True) Erase list '配列の初期化 Set dataObj = Nothing 'DataObjectインスタンスのメモリを開放 End If Set ClipBoard = Nothing Exit Sub myError: Application.Wait Now() + TimeValue("00:00:03") '3秒間の停止 Resume 0 ' エラーが起きたステートメントを再実行 End Sub Sub test11() ' 選択したフォルダ階層(子フォルダを含む)に含まれるフォルダフルパスと全ファイル名を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  実行結果[0〜n] (子フォルダを含む)フォルダのフルパス あるいは (拡張子付きの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" scriptParam = "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfChildFolders", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If Rem OneDrive 等 Cloud環境下で動作させると、以下パスが https://〜 となるため注意! Rem Debug.Print "*****" Rem Debug.Print ActiveWorkbook.Path & Application.PathSeparator & ActiveWorkbook.Name End Sub Sub test12() ' 選択したフォルダ階層(子フォルダを含む)に含まれるフォルダフルパスと全ファイル名を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3]  ファイル拡張子の指定:"css" のように 1つだけ指定(2つめ以降は無視) '  実行結果[0〜n] (子フォルダを含む)フォルダのフルパス あるいは (拡張子なしの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & LCase("css") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfChildFoldersByExt", _ scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test13() ' 選択したフォルダ階層(子フォルダを含む)に含まれるフォルダフルパスと全ファイル名を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3〜n]ファイル拡張子の指定:"css" "html"のように 複数指定可(1つでもOK) '  実行結果[0〜n] (子フォルダを含む)フォルダのフルパス あるいは (拡張子付きの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & LCase("css") & vbLf & LCase("js") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfChildFoldersByExts", _ scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test14() ' 選択したフォルダ階層(子フォルダを含む)に含まれるフォルダフルパスと全ファイル名を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3]  keyString [fileNameExt contains keyString] ファイル名が keyStr を含む '  パラメータ[4〜n]ファイル拡張子の指定:"css" "html"のように 複数指定可(1つでもOK) '  実行結果[0〜n] (子フォルダを含む)フォルダのフルパス あるいは ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & "light" & vbLf & LCase("css") & vbLf & LCase("js") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfChildFoldersByExtsAndKey", _ scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test15() ' 選択したフォルダ階層(子フォルダを含む)に含まれるフォルダフルパスと全ファイル名を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" ' パラメータ[3] 正規表現[文字列]: グループ化して利用するため、前後を ( ) で括ること! ' ex) "(^(a).*.(css|js)+$)" <= ファイル名が「 a で始まり、末尾が .css 又は .js 」」 ' ex) "(.*light.*.(css|js)+$)" <= 「末尾が .css 又は .js で、light の文字列を含む」」 ' 「拡張子を含むファイル名」を正規表現にて抽出 [注]エスケープシーケンスのため「 . ピリオド」は ' 通常 . 表記ですが、NSPredicate に問題があるため . つまり4つ連続でないとエラーの場合あり!№り!I '  実行結果[0〜n] (子フォルダを含む)フォルダのフルパス あるいは (拡張子付きの)ファイル名 ' (注) 最終結果を正規表現で単純抽出のため、該当ファイルZEROでも フォルダフルパスのみの行が出来てしまう ' つまり、ファイル無しでフォルダフルパスの行のみが出来る場合があるため、VBAで除外して頂きたい! Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & "(.*light.*.(css|js)+$)" ' ファイル名が「 a で始まり、末尾が .css 又は .js 」(注)vbeではバックスラッシュが 表示ヲ scriptParam = "" & vbLf & "" & vbLf & "(^(a).*.(css|js)+$)" scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfChildFoldersByRegExp", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test16() ' 選択したフォルダ階層(子フォルダを含む)に含まれるファイルのフルパスを取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  実行結果[0〜n] フォルダ階層(子フォルダを含む)に含まれるファイルの フルパス Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" scriptParam = "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getPathListOfChildFolders", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test17() ' 選択したフォルダ階層(子フォルダを含む)に含まれるファイルのフルパスを取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3〜n]ファイル拡張子の指定:"css" "html"のように 複数指定可(拡張子1つでもOK) '  実行結果[0〜n] フォルダ階層(子フォルダを含む)に含まれるファイルの フルパス Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & LCase("css") & vbLf & LCase("js") scriptResult = AppleScriptTask("filePath.scpt", "getPathListOfChildFoldersByExts", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test21() ' 「拡張子指定なし」選択フォルダの(POSIX)パス名+「(拡張子付きの)全ファイル名」を取得 ' ( フォルダやファイル名に 漢字が含まれても 問題無し ) '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" ' 注. list(0) 「ディレクトリの(POSIX)パス」を格納 ' list(1〜n) 「ファイル名(拡張子あり)」を格納 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" scriptParam = "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfFolder", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test22() ' 選択フォルダの(POSIX)パス名+「(拡張子なしの)全ファイル名」を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3] ファイル拡張子の指定:"css" のように 1つだけ指定する(2つめ以降は無視) '  実行結果[0]  指定フォルダ(ディレクトリ)の POSIXフルパス '  実行結果[1〜n] (拡張子なしの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & LCase("css") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfFolderByExt", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test23() ' 選択フォルダの(POSIX)パス名+「(拡張子付きの)全ファイル名」を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3〜n]ファイル拡張子の指定:"css" "html"のように 複数指定可(1つでもOK) '  実行結果[0]  指定フォルダ(ディレクトリ)の POSIXフルパス '  実行結果[1〜n] (拡張子付きの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & LCase("css") & vbLf & LCase("js") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfFolderByExts", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test24() ' 選択フォルダの(POSIX)パス名+「(拡張子付きの)全ファイル名」を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3] keyString [fileNameExt contains keyString] ファイル名に keyString を含む '  パラメータ[4〜n]ファイル拡張子の指定:"css" "html"のように 複数指定可(1つでもOK) '  実行結果[0]  指定フォルダ(ディレクトリ)の POSIXフルパス '  実行結果[1〜n] (拡張子付きの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & "Key" & vbLf & LCase("css") scriptParam = "" & vbLf & "" & vbLf & "light" & vbLf & LCase("css") & vbLf & LCase("js") scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfFolderByExtsAndKey", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test25() ' 選択フォルダの(POSIX)パス名+「(拡張子付きの)全ファイル名」を取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3] 正規表現[文字列]: グループ化して利用するため、前後を ( ) で括ること! ' ex) "(^(a).*.(css|js)+$)" <= ファイル名が「 a で始まり、末尾が .css 又は .js 」」 ' ex) "(.*light.*.(css|js)+$)" <= 「末尾が .css 又は .js で、light の文字列を含む」」 ' 「拡張子を含むファイル名」を正規表現にて抽出 [注]エスケープシーケンスのため「 . ピリオド」は '  通常 . 表記ですが、NSPredicate に問題があるため . つまり4つ連続でないとエラーの場合あり!№り!I '  実行結果[0]  指定フォルダ(ディレクトリ)の POSIXフルパス '  実行結果[1〜n] (拡張子付きの)ファイル名 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「パスorファイル名」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "フォルダ選択!" & vbLf & "/Users/username/" & vbLf & "(.*light.*.(css|js)+$)" ' ファイル名が「 a で始まり、末尾が .css 又は .js 」(注)vbeではバックスラッシュが 表示ヲ scriptParam = "" & vbLf & "" & vbLf & "(^(a).*.(css|js)+$)" scriptResult = AppleScriptTask("filePath.scpt", "getFileListOfFolderByRegExp", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test31() '「単一」ファイル選択ダイアログで、フルパスを取得(拡張子限定あり) '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3〜n]ファイル拡張子:"css" "html"のように 複数限定可(厳密だと、UTIを4つまで) '   厳密には「拡張子ではなくUTI限定」のため、無効だと全ファイルが選択可能となる! ' 注. list(0) 「ディレクトリの(POSIX)フルパス」を格納 ' list(1) 「ファイル名(拡張子あり)」を格納 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「フルパス」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "単一ファイル選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") 'getUtiByDialog() にて調べた xlsx , xlsm 対応のUTIをセットして、他のUTIを持つファイルを除外 scriptParam = "" & vbLf & "" & vbLf & "org.openxmlformats.spreadsheetml.sheet" & _ vbLf & "org.openxmlformats.spreadsheetml.sheet.macroenabled" scriptResult = AppleScriptTask("filePath.scpt", "getFilePath", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test32() '「複数」ファイル選択ダイアログで、フルパスを取得(拡張子限定あり) '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" '  パラメータ[3〜n]ファイル拡張子:"css" "html"のように 複数限定可(厳密だと、UTIを4つまで) '   厳密には「拡張子ではなくUTI限定」のため、無効だと全ファイルが選択可能となる! ' 注. list(0) 「ディレクトリの(POSIX)フルパス」を格納 ' list(1〜n) 「ファイル名(拡張子あり)」を格納 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「フルパス」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "複数ファイル選択!" & vbLf & "/Users/username/" & vbLf & LCase("css") 'getUtiByDialog() にて調べた xlsx , xlsm 対応のUTIをセットして、他のUTIを持つファイルを除外 scriptParam = "" & vbLf & "" & vbLf & "org.openxmlformats.spreadsheetml.sheet" & _ vbLf & "org.openxmlformats.spreadsheetml.sheet.macroenabled" scriptResult = AppleScriptTask("filePath.scpt", "getMultiFilePath", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub Sub test33() '「単一」フォルダ選択ダイアログで、フォルダのフルパスを取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" ' 注. scriptResult 「ディレクトリの(POSIX)フルパス」を格納 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "単一フォルダ選択!" & vbLf & "/Users/username/" scriptParam = "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getFolderPath", scriptParam) Debug.Print scriptResult End Sub Sub test34() '「複数」フォルダ選択ダイアログで、フォルダのフルパスを取得 '  パラメータ[1]  プロンプト文字列:""なら、AppleScriptコード設定の初期値 '  パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' POSIXフルパス指定のため、先頭と末尾に / が必要 ex) "/Users/username/Downloads/" ' 注. list(0〜n) 「ディレクトリの(POSIX)フルパス」を格納 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF Dim list() As String ' 「フルパス」格納用として「文字列の配列」を定義 ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "複数フォルダ選択!" & vbLf & "/Users/username/" scriptParam = "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getMultiFolderPath", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If End Sub 'ファイル存在チェック(引数のパスが有効で、ファイルパスかどうか?) '引数 path ( / から始まる)絶対パス '結果 ""「パスが無効 もしくは フォルダパス」 又は(拡張子を含めた)ファイル名 Function MAC_FileExists(path As String) As String On Error GoTo myError MAC_FileExists = "" '「関数の結果」を初期化 Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) ' AppleScriptを実行 ' scriptParam = "/Users/username/Desktop/fileName.ext" scriptParam = path scriptResult = AppleScriptTask("filePath.scpt", "checkFilePath", scriptParam) MAC_FileExists = scriptResult '「関数の結果」←「(拡張子を含めた)ファイル名」 Exit Function myError: MsgBox "エラー発生!(MAC_FileExists)" End Function 'フォルダ存在チェック(引数のパスが有効で、フォルダパスかどうか?) '引数 path ( / から始まる)絶対パス '結果 ""「パスが無効 もしくは ファイルパス」 又は POSIX FolderPath ' 「(有効な)POSIX FolderPath」として、末尾に"/"を付加したパスを返す Function MAC_FolderExists(path As String) As String On Error GoTo myError MAC_FolderExists = "" '「関数の結果」を初期化 Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) ' AppleScriptを実行 ' scriptParam = "/Users/username/Desktop/" scriptParam = path scriptResult = AppleScriptTask("filePath.scpt", "checkDirPath", scriptParam) If scriptResult <> "" Then '(注) scriptResult は「(末尾の)フォルダ名」を格納 If Right(path, 1) = "/" Then 'パスの末尾が "/" MAC_FolderExists = path Else MAC_FolderExists = path & "/" '「末尾に"/"を付加したPOSIX path」を返す End If End If Exit Function myError: MsgBox "エラー発生!(MAC_FolderExists)" End Function 'Macで"FileFilter"パラメータを措定すると、エラー! 'パラメータの MultiSelect は指定可能だが、無効で 2021/09/26現在 複数選択できない ' Application.GetOpenFilename を利用せず、 AppleScriptで 代替 ' パラメーター utiList は、UTIの配列 Function MAC_GetOpenFilename(utiList As Variant) As String '単一選択 On Error GoTo myError MAC_GetOpenFilename = "" Dim filePath As String Dim utiListStr As String utiListStr = Join(utiList, vbLf) '配列の要素ごとに vbLf を挿入した文字列 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "単一ファイル選択!" & vbLf & "/Users/username/" & vbLf & LCase("xml") 'getUtiByDialog() にて調べた xlsx , xlsm 対応のUTIをセットして、他のUTIを持つファイルを除外 scriptParam = "" & vbLf & "" & vbLf & utiListStr scriptResult = AppleScriptTask("filePath.scpt", "getFilePath", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る MAC_GetOpenFilename = scriptResult End If Exit Function myError: MsgBox "エラー発生!(MAC_GetOpenFilename)" MAC_GetOpenFilename = "" '「関数の結果」を初期化 End Function Sub sample_MAC_GetOpenFilename() On Error GoTo myError Dim filePath As String Dim utiList(2) As String '拡張子に対応する「UTI」を2つ指定する場合 [getUtiByDialogでUTI調査] utiList(0) = "org.openxmlformats.spreadsheetml.sheet" 'UTI for ".xlsx" utiList(1) = "org.openxmlformats.spreadsheetml.sheet.macroenabled" 'UTI for ".xlsm" filePath = "" ' 「指定したUTIを持つファイル」のみ単一選択可能なダイアログを表示 filePath = MAC_GetOpenFilename(utiList) If filePath = "" Then 'ダイアログで「キャンセル」した場合、何も行わない MsgBox "「キャンセル」又は「取得失敗」!" & vbLf & "( MAC_GetOpenFilename )" Exit Sub End If Dim list() As String '「文字列の配列」を定義 list = Split(filePath, vbLf) filePath = list(0) & list(1) MsgBox filePath Exit Sub '以下、サンプル操作を実行しない(サンプル実行なら、この行を削除かコメント化) ' 以下、サンプル操作 Dim wb As Workbook Dim fileNameExt As String fileNameExt = MAC_FileExists(filePath) 'ファイルが存在する場合、ファイル名が返る If fileNameExt = "" Then 'ダイアログで filePath を取得したため、filePath 通常 有効なはず MsgBox filePath & vbCrLf & "は、存在しません", vbExclamation Exit Sub End If For Each wb In Workbooks If wb.Name = fileNameExt Then '同名ブックを既に開いているか? MsgBox filePath & vbCrLf & "は、既に開いています!", vbExclamation Exit Sub End If Next wb Workbooks.Open FileName:=filePath Exit Sub myError: Application.DisplayAlerts = True '確認画面を表示するように 設定を戻す MsgBox "エラー発生!(sample_MAC_GetOpenFilename)" End Sub 'Macで"FileFilter"パラメータを措定すると、エラー! 'パラメータの MultiSelect は指定可能だが、無効で 2021/09/26現在 複数選択できない ' Application.GetOpenFilename を利用せず、 AppleScriptで 代替 ' パラメーター utiList は、UTIの配列 Function MAC_GetOpenFilenameMultiSelect(utiList As Variant) As String '複数選択 On Error GoTo myError MAC_GetOpenFilenameMultiSelect = "" Dim filePath As String Dim utiListStr As String utiListStr = Join(utiList, vbLf) '配列の要素ごとに vbLf を挿入した文字列 Dim scriptResult As String ' AppleScript 実行結果 (文字列)、区切り文字 LF Dim scriptParam As String ' AppleScript パラメータ(文字列)、区切り文字 LF ' AppleScriptを実行 (最後のパラメータが AppleScript に渡される文字列) ' パラメータの区切り文字には、Macの改行コード(vbLf)を指定 ' scriptParam = "単一ファイル選択!" & vbLf & "/Users/username/" & vbLf & LCase("xml") 'getUtiByDialog() にて調べた xlsx , xlsm 対応のUTIをセットして、他のUTIを持つファイルを除外 scriptParam = "" & vbLf & "" & vbLf & utiListStr scriptResult = AppleScriptTask("filePath.scpt", "getMultiFilePath", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時も、空文字列が返る MAC_GetOpenFilenameMultiSelect = scriptResult End If Exit Function myError: MsgBox "エラー発生!(MAC_GetOpenFilenameMultiSelect)" MAC_GetOpenFilenameMultiSelect = "" '「関数の結果」を初期化 End Function Sub sample_MAC_GetOpenFilenameMultiSelect() On Error GoTo myError Dim filePath As String Dim utiList(2) As String '拡張子に対応する「UTI」を2つ指定する場合 [getUtiByDialogでUTI調査] utiList(0) = "org.openxmlformats.spreadsheetml.sheet" 'UTI for ".xlsx" utiList(1) = "org.openxmlformats.spreadsheetml.sheet.macroenabled" 'UTI for ".xlsm" filePath = "" ' 「指定したUTIを持つファイル」のみ「複数」選択可能なダイアログを表示 filePath = MAC_GetOpenFilenameMultiSelect(utiList) If filePath = "" Then 'ダイアログで「キャンセル」した場合、何も行わない MsgBox "「キャンセル」又は「取得失敗」!" & vbLf & "( MAC_GetOpenFilenameMultiSelect )" Exit Sub End If Dim list() As String 'ファイルフルパス格納用として、「文字列の配列」を定義 Dim i As Long list = Split(filePath, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 For i = LBound(list) To UBound(list) MsgBox list(i) 'list(0):フォルダフルパス list(1〜n):ファイル名 Next i Exit Sub '以下、サンプル操作を実行しない(サンプル実行なら、この行を削除かコメント化) ' 以下、サンプル操作 (省略) Exit Sub myError: Application.DisplayAlerts = True '確認画面を表示するように 設定を戻す MsgBox "エラー発生!(sample_MAC_GetOpenFilenameMultiSelect)" End Sub '2021/09/26現在 Macで"FileFilter"パラメータを措定不可 → 指定した拡張子(配列)と異なる場合は"" ' ex) Dim extList(2) As String '許可する「拡張子」を2つ指定する場合(もちろん、1つでも可) ' extList(0) = "xlsx" ' extList(1) = "xlsm" ' dim filePath as Variant : filePath = "" ' Do Until (filePath = False Or filePath <> "") '指定した拡張子(配列)のみ、許可 ' filePath = MAC_GetSaveAsFilename("initialNoExtFileName", extList) ' Loop Function MAC_GetSaveAsFilename(initialFileName As String, extList As Variant) As Variant On Error GoTo myError Dim filePath As Variant 'ダイアログで「キャンセル」した場合、Falseが返されるため Variant型 MAC_GetSaveAsFilename = "" '「関数の結果」を初期化 'Macで"FileFilter"パラメータ措定するとエラー(←拡張子のみで起動アプリは決まらない) '(注)指定したパスのファイルが既に存在する場合、「置き換え」の警告ダイアログが表示される filePath = Application.GetSaveAsFilename(initialFileName) '(拡張子無しの)表示ファイル名 If filePath = False Then MAC_GetSaveAsFilename = filePath Exit Function 'ダイアログで「キャンセル」した場合、Falseが返される End If Rem If MAC_FileExists(CStr(filePath)) <> "" Then Rem Exit Function '既に存在する場合も""を返して、「上書き」させないようにする Rem End If '以降、指定した拡張子(配列)に含まれるかどうか? Dim pos As Long Dim fileExt As String '取得した拡張子 Dim ext As Variant 'As Stringだと、エラーとなる pos = InStrRev(CStr(filePath), ".") '拡張子を取得するため、末尾から検索 If pos > 0 Then fileExt = LCase(Mid(CStr(filePath), pos + 1)) Else Exit Function '拡張子なし の場合、""を返す End If For Each ext In extList If fileExt = ext Then '指定した拡張子(配列)に含まれるかどうか? MAC_GetSaveAsFilename = filePath 'フルパスを「関数の結果」として返す Exit For End If Next Exit Function myError: MsgBox "エラー発生!(MAC_GetSaveAsFilename)" MAC_GetSaveAsFilename = "" '「関数の結果」を初期化 End Function Sub sample_MAC_GetSaveAsFilename() On Error GoTo myError Dim filePath As Variant Dim extList(2) As String '拡張子を2つ指定する場合 extList(0) = "xlsx" extList(1) = "xlsm" filePath = "" ' 指定した拡張子(配列)でない場合、再度ダイアログを表示 Do Until (filePath = False Or filePath <> "") filePath = MAC_GetSaveAsFilename("fileName", extList) Loop If filePath = False Then 'ダイアログで「キャンセル」した場合、コピー保存しない MsgBox "処理が「キャンセル」されました!" & vbCrLf & "( GetSaveAsFilename )" Exit Sub End If MsgBox filePath Exit Sub '以下、サンプル操作を実行しない(サンプル実行なら、この行を削除かコメント化) ' 以下、サンプル操作 Application.DisplayAlerts = False '確認画面を表示しないように 設定(今回は、上書き) ActiveWorkbook.SaveCopyAs (filePath) 'ActiveWorkbook は変更されず、コピー保存される Application.DisplayAlerts = True '確認画面を表示するように 設定を戻す Exit Sub myError: Application.DisplayAlerts = True '確認画面を表示するように 設定を戻す MsgBox "エラー発生!(sample_MAC_GetSaveAsFilename)" End Sub Function GetUtiByDialog() As String '「ファイル選択ダイアログ」でファイルの UTI を取得【UTI (Uniform Type Identifier) 調査用】 Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) scriptParam = "" '必要ないため、ダミーで "" をセット scriptResult = AppleScriptTask("filePath.scpt", "GetUtiByChooseFile", scriptParam) Debug.Print scriptResult GetUtiByDialog = scriptResult End Function '「selection範囲」をクリップボードにコピー 後、「完了」メッセージを表示する Sub CopyToClipboard() Selection.Copy ' クリップボードにコピー Application.CutCopyMode = False 'コピー範囲の解除 MsgBox "クリップボードにコピー【完了】" & vbNewLine & _ "[ " & Selection.Address(False, False) & " ]" End Sub 'Selection範囲内の「Excel用TSVデータ」を作成する、オリジナル関数 'Excel TSV書式(UTF-8 CRLF改行コード 「列」毎に水平タブ[chr(09)]を挟む セル内改行コードはLF) 'クリップボードによるTSVデータ作成結果で、以下2つの問題に対処(必要なら対処を追加して下さい) '[1] 1行単位で、「末尾の余分なタブコード」を削除 '[2] #NAME? 対策 → Cells(row, col).Formula「計算式」を利用(ただし、先頭の"="は削除) Function CreateTsvDataFromSelection(newLineCode As String) As String CreateTsvDataFromSelection = "" Dim HT As String: HT = Chr(9) '「列」(フィールド)区切り用「水平タブ」コード HT Dim row As Long, col As Long Dim textData As String: textData = "" 'TSV(タブ区切りの)テキストデータ Dim lineData As String: lineData = "" 'work用の「行」テキストデータ 'HT & 改行コード を挿入し、TSV(タブ区切りの)フォーマットのテキストデータを作成 'Excelの場合セル内改行コードは LF となるため、Macでも改行コード CRLF を利用すべき 'Selection(1)はSelection範囲の左上のセル、Selection(Selection.Count)は(同)右下のセルを示す For row = Selection(1).row To Selection(Selection.Count).row For col = Selection(1).Column To Selection(Selection.Count).Column If col = Selection(Selection.Count).Column Then '「最終列」の処理 If IsError(Cells(row, col)) Then ' #NAME? 対策 lineData = lineData & Mid(CStr(Cells(row, col).Formula), 2) '先頭の"="を削除 Else lineData = lineData & CStr(Cells(row, col).Text) End If Else '「最終列」以外の処理(末尾に、タブ区切りのコードを挿入) If IsError(Cells(row, col)) Then ' #NAME? 対策 lineData = lineData & Mid(CStr(Cells(row, col).Formula), 2) & HT Else lineData = lineData & CStr(Cells(row, col).Text) & HT End If End If Next col '(1行単位で)末尾の余分な HT を削除 Do While (Len(lineData) <> 0 And (Right(lineData, 1) = HT)) lineData = Left(lineData, Len(lineData) - 1) '末尾の1文字(HT)を削除 Loop If row = Selection(Selection.Count).row Then textData = textData & lineData '最終行 Else textData = textData & lineData & newLineCode '最終行以外は末尾に改行コードを挿入 End If lineData = "" 'work用の「行」テキストデータを初期化 Next row CreateTsvDataFromSelection = textData End Function 'UTF-8エンコードで、テキストデータをファイル書き込み(既に存在する場合は、置き換え) ' パラメータ[1] useCB As Boolean: false or true(クリップボードを利用するかどうか?) ' パラメータ[2] append As String: "create"(書き込み) or "append"(追記) ' パラメータ[3] newLineCode As String:"CRLF" or "LF" or "CR"(テキストデータ内の改行コード) ' 結果 true(書き込み成功 or 置き換え成功)、 false(失敗) Function WriteTextFile(useCB As Boolean, append As String, newLineCode As String) As Boolean On Error GoTo myError WriteTextFile = False Dim textData As String Dim CRLF As String: CRLF = Chr(13) & Chr(10) 'vbCrLfで、 (0d0a)h がセットされなかったため 'Selection範囲の指定(1行目は「見出し行」を想定し、2行目以降を対象とする) ActiveSheet.Select Range("A2", ActiveCell.SpecialCells(xlLastCell)).Select '"A2" TSV出力したいセル範囲の開始セル 'MsgBox Selection.Address(False, False) ' ex) A2:D2039 1行目は「見出し」行のため 'ExcelTSVデータ UTF-8 CRLF改行コード 「列」毎に水平タブ[chr(09)]を挟む セル内改行コードはLF If useCB Then textData = "" Call CopyToClipboard 'データの受け渡しに、クリップボードを利用する(範囲:Selection) Else textData = CreateTsvDataFromSelection(CRLF) '範囲:Selection、引数は(挿入)改行コード End If Dim filePath As Variant Dim extList(2) As String '拡張子を2つ指定する場合 extList(0) = "tsv" extList(1) = "txt" 'Excelで「タブ区切り」を選ぶと、拡張子は txt となるため filePath = "" ' 指定した拡張子(配列)でない場合、再度ダイアログを表示 Do Until (filePath = False Or filePath <> "") filePath = MAC_GetSaveAsFilename("fileName", extList) Loop If filePath = False Then 'ダイアログで「キャンセル」した場合、コピー保存しない MsgBox "処理が「キャンセル」されました!" & vbCrLf & "( GetSaveAsFilename )" Exit Function End If '以下は、AppleScriptTaskコマンドのパラメータ説明 ' パラメータ区切りは、LF ではなく CRLF を利用!(Excel TSVファイルデータ対応) ' パラメータ[1]  (書き込む)ファイルのフルパス ' パラメータ[2]  Appendなら "append" 、Createなら "create" 文字列指定 ' パラメータ[3]  改行コード "CRLF" 又は "LF" 又は "CR" ' パラメータ[4〜n]パラ3指定の改行コード区切りのUTF-8テキストデータ 連結してテキストデータとする ' 【注意】"" の場合は、クリップボード内のUTF-8テキストデータを書き込む ' 実行結果 書き込み(置き換え)エラー時は""、正常終了なら該当ファイルの「ファイル名」が返る 'Excel用TSVファイル(CRLF改行コード、タブ区切り「HT:Chr(09)」、セル内改行はLF)にて テスト済み Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) 'クリップボード利用時は、textData = "" scriptParam = filePath & CRLF & LCase(append) & CRLF & UCase(newLineCode) & CRLF & textData scriptResult = AppleScriptTask("filePath.scpt", "putTextFileAsUTF8", scriptParam) If scriptResult <> "" Then Rem MsgBox scriptResult '正常終了時、書き込みファイルの「ファイル名」が返る WriteTextFile = True End If Exit Function myError: MsgBox "エラー発生!(WriteTextFile)" End Function ' ファイル選択ダイアログで、指定テキストデータをUTF-8で読み込む(クリップボードにもセット) Function ReadTextFile() As String 'Openダイアログを利用して、テキストデータをUTF-8エンコードで読み込む【クリップボードにもセット】 On Error GoTo myError ReadTextFile = "" '以下は、AppleScriptTaskコマンドのパラメータ説明 ' パラメータ[1]  プロンプト文字列:""なら、AppleScriptハンドラー設定の初期値 ' パラメータ[2]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' パラメータ[3〜6]UTIを4つまで指定可能 ""(無指定)なら"public.plain-text"を利用→ *.tsv対象 ' 実行結果[0〜n] エラー時は""、 正常終了なら テキストファイル全体を文字列として返す(改行コードに注意) 'Excel用TSVファイル(CRLF改行コード、タブ区切り「HT:Chr(09)」、セル内改行はLF)にて テスト済み Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) 'scriptParam = "ReadTextFile!" & vbLf & "/Users/username/" & vbLf & "public.plain-text" scriptParam = "" & vbLf & "" & vbLf & "" scriptResult = AppleScriptTask("filePath.scpt", "getTextFileAsUTF8", scriptParam) 'Debug.Print scriptResult 'for Debug【結果だけでなく、クリップボードにもセット】 ReadTextFile = scriptResult '改行コードに注意( CRLF 又は LF 又は CR を想定) Exit Function myError: MsgBox "エラー発生!(readTextFile)" End Function ' 指定フォルダ(子フォルダを含む)内のPDFファイルを順に読み込み、テキストファイルとして書き出し ' [注意] 予め、Skimアプリ(無料のPDFリーダー+注釈付加ツール)のインストールが必要! Sub WriteTextFileFromPdfOfFolder() 'フォルダ選択ダイアログで指定すると、同一フォルダ内に「拡張子のみ.txtに変更」して書き込み On Error GoTo myError '以下は、AppleScriptTaskコマンドのパラメータ説明 ' パラメータ[1]  検索キーワード(rtf指定時のみ有効で、キーワード全箇所を黄色に変更) ' パラメータ[2]  プロンプト文字列:""なら、AppleScriptハンドラー設定の初期値 ' パラメータ[3]  初期表示フォルダ:""なら、無指定(前回と同じフォルダを開く) ' パラメータ[4]  書式": txt" or "rtf"(省略時は、"txt"プレーンテキスト指定)RTF:RichTextFormat ' 実行結果[0〜n] エラー時は""、 正常終了なら(拡張子なし)該当PDFファイルのフルパスを返す Dim list() As String ' 「フルパス」格納用として「文字列の配列」を定義 Dim scriptResult As String ' AppleScript 実行結果 (文字列) Dim scriptParam As String ' AppleScript パラメータ(文字列) 'scriptParam = "" & vbLf & "Select PDF's folder!" & vbLf & "/Users/username/Desktop/" '★txt★ scriptParam = "スクリプティング" & vbLf & "" & vbLf & "" & vbLf & "rtf" '★rtf★ scriptResult = AppleScriptTask("filePath.scpt", "putTextFromPdfOfSelectFolder", scriptParam) If scriptResult <> "" Then '「キャンセル」ボタン押下時や、PDFファイル無し→空文字列 list = Split(scriptResult, vbLf) 'vbLf = Chr(10) 区切り文字に LF を利用 Call DispArray(list) '実行結果(文字列)の表示 Erase list '配列の初期化 Call GetClipBoard 'クリップボードに格納したテキストデータを取得&表示 End If Exit Sub myError: MsgBox "エラー発生!(WriteTextFileFromPdfOfFolder)" End Sub