MacでExcelVBAを使う際にもっとも基本的なことなのに難しいことのひとつに日本語のファイルのパス指定があります。
Macでも、Applescriptを使うと、日本語のパスでも取得可能でしたので、忘備録のため記載します。
コード
Public Sub Main_Proc() MyPath = GetFilePathForMac("Excelを選んでください", " {""xls"", ""xlsx""}") ActiveSheet.Range("C9").Value = MyPath End Sub Rem Mac用にファイルパスを取得する(1つのファイル) Private Function GetFilePathForMac(mypronpt As String, myfiletype As String) As String Dim MyPath As String Dim MyScript As String Dim MyFiles As String Dim Fname As String On Error Resume Next 'ローカルファイルのパスをデフォルトのパスとする MyPath = MacScript("return (path to documents folder) as String") 'AppleScriptを設定する。 MyScript = _ "set applescript's text item delimiters to "","" " & vbNewLine & _ "set theFiles to (choose file of type " & _ myfiletype & _ "with prompt """ & mypronpt & """ default location alias """ & _ MyPath & """) as string" & vbNewLine & _ "set applescript's text item delimiters to """" " & vbNewLine & _ "return theFiles" 'AppleScriptを使用してファイルのパスを取得する。Finderが立ち上がります。 MyFiles = MacScript(MyScript) 'エラーが起きたらスルーします。 On Error GoTo 0 'ファイルのパスが取得できたら以下を処理する。 If MyFiles <> "" Then GetFilePathForMac = MyFiles Else MsgBox "ファイルが取得できませんでした" GetFilePathForMac = "" End If End Function
解説1
Public Sub Main_Proc() MyPath = GetFilePathForMac("Excelを選んでください", " {""xls"", ""xlsx""}") ActiveSheet.Range("C9").Value = MyPath End Sub
引数として、ダイアログに表示する文字と、ファイルの拡張子を渡します。
返ってきたパスをExcelのセル上に描写しています。
解説2
MyScriptとして、AppleScriptを指定します。ここは、AppleScriptエディタでいろいろとやってみると、複数のファイルを指定したりなど変えることができます。
MacScript関数を使って、ExcelからAppleScriptを実行します。
Rem Mac用にファイルパスを取得する(1つのファイル) Private Function GetFilePathForMac(mypronpt As String, myfiletype As String) As String Dim MyPath As String Dim MyScript As String Dim MyFiles As String Dim Fname As String On Error Resume Next 'ローカルファイルのパスをデフォルトのパスとする MyPath = MacScript("return (path to documents folder) as String") 'AppleScriptを設定する。 MyScript = _ "set applescript's text item delimiters to "","" " & vbNewLine & _ "set theFiles to (choose file of type " & _ myfiletype & _ "with prompt """ & mypronpt & """ default location alias """ & _ MyPath & """) as string" & vbNewLine & _ "set applescript's text item delimiters to """" " & vbNewLine & _ "return theFiles" 'AppleScriptを使用してファイルのパスを取得する。Finderが立ち上がります。 MyFiles = MacScript(MyScript) 'エラーが起きたらスルーします。 On Error GoTo 0 'ファイルのパスが取得できたら以下を処理する。 If MyFiles <> "" Then GetFilePathForMac = MyFiles Else MsgBox "ファイルが取得できませんでした" GetFilePathForMac = "" End If End Function
最後に
これだけのことなのに、日本語で解説してくれるサイトが少ないために意外と苦労します。何かのお役にたてば。
以上です。