Excel 2019 for Mac の VBA について

December 1, 2020
excel vba Mac

Excel 2019 for Mac の VBA について

Excel 2016 for Mac の VBA は前バージョンの Excel 2011 for Mac と大きく変更となり、多くのユーザーが振り回されました。今回は Excel 2019 for Mac の VBA が Windows10 バージョンとどう違うのかを以前執筆したExcel 2016 for Mac の VBA についてを軸に見ていきたいと思います。

前回の検証内容

前回、Excel 2016 for Mac の VBA は前バージョンの Excel 2011 for Mac の違いの中で主に言及していたのは以下の6つでした。

  1. VBA内のAppleScript禁止
  2. 言語判定の変更
  3. Name ステートメントの対応
  4. パスセパレーターの変更
  5. ファイルアクセス権の確認
  6. PrintOutの違い

今回はこの中でも 1. VBA内のAppleScript禁止 3. Name ステートメントの対応 6. PrintOutの違いと OpenFileName(ファイルチューザー) 、 Application.FileDialog(msoFileDialogFolderPicker)(フォルダチューザー) 、 dir関数の挙動を見ていきたいと思います。

今回の検証内容

  1. VBA内のAppleScript禁止
  2. OpenFileName(ファイルチューザー)
  3. Application.FileDialog(msoFileDialogFolderPicker)(フォルダチューザー)
  4. Name ステートメントの対応
  5. PrintOutの違い
  6. dir関数

検証内容の結果

先に各OSの検証結果を記します。結果の後でテストコードを表記します。

Windows10

Windows10では 1.MacScript関数のみがエラーが発生しました。当然ですがその他は問題無く動いています。もし、Mac版でも利用される恐れのあるVBAの場合は必ず OS で分岐をしないといけない事がわかります。

1.MacScript関数のエラー内容は以下の通りです。

MacOS catalina

MacOS catalinaでは 1.VBA内のAppleScript禁止, 3.Application.FileDialog(msoFileDialogFolderPicker)(フォルダチューザー) が完全に使用不能で、2.OpenFileName(ファイルチューザー) はワイルドカードを用いなければ使用可能でした。

MacScript関数は Excel 2016 for Mac から使用不能でしたので、AppleScriptTaskへ移行する事が肝要のようです。意外にもワイルドカード付きの dir 関数が利用できるようになっていました。ここ最近では一番の吉報ではないでしょうか。

ただし、外部ファイルにアクセスする場合は最初にアクセス権を付与する必要があります。完全な自動化は少し無理があるかもしれません。

尚、1.MacScript関数は成功すると Excel 2011 for Mac では以下のように選択したフォルダのパスを返します。

VBA

ファイルチューザー(指定なし)

Sub OpenFilename()

ActiveCell.value = Application.GetOpenFilename()

End Sub

ファイルチューザー(指定あり)

Sub CsvChooser()

ActiveCell.value = Application.GetOpenFilename(FileFilter:="CSV Files (*.csv), *.csv")

End Sub

フォルダチューザー

Sub FolderDialog()

With Application.FileDialog(msoFileDialogFolderPicker)
        .AllowMultiSelect = False
        If .Show = True Then
            ActiveCell.value = .SelectedItems(1)
        Else
            ActiveCell.value = "False"
       End If
End With

End Sub

Nameステートメント

Sub FileMove()

Dim file As String
Dim dir As String

file = Range("B2").value

dir = Range("B3").value & Application.PathSeparator & "sample.csv"

Name file As dir

End Sub

dir関数

Sub dirTest()

Dim buf As String, i As Integer

buf = dir(Range("B3") & Application.PathSeparator & "*.csv")

i = 10

Do While buf <> ""
        Cells(i, 2).value = buf
        buf = dir()
        i = i + 1
    Loop

End Sub

印刷(ActiveWindow)

Sub Printout_window()

ActiveWindow.SelectedSheets.Printout From:=1, To:=1, Copies:=1

End Sub

印刷(ThisWorkbook)

Sub PrintOut_thisworkbook()

ThisWorkbook.ActiveSheet.Printout

End Sub

MacScript関数

Sub MacScriptTest()

Dim str As String
Dim appscript As String
appscript = "tell application ""Finder""" & vbNewLine & "try" & vbNewLine & "choose folder with prompt ""formeCSVmodule""" _
& vbNewLine & "on error number err_num" & vbNewLine & "False" & vbNewLine & "end try" & vbNewLine & "end tell"

str = MacScript(appscript)
If str <> "False" Then
    ActiveCell.value = Replace(str, "alias ", "")
Else
    ActiveCell.value = "False"
End If

End Sub

Excel 2019 for Mac で使用不能なものは他にユーザーフォームの作成、編集ができないなどがあります。

Excel 2019 for Mac で AppleScript は不要になるかなとも思っていましたが、中々そうは行かないようです。私が配布している FormeCollector2 では AppleScript を出力する機能を付けています。所定の位置に保存してもらう必要がありますが、別でAppleScript インストール支援アプリ FormeVBAassist.app(MIT LICENSE) を配布して、インストール作業の支援をしています。

頭の痛い問題ではありますが Office 2019 からライセンスが変わり、ひとつのライセンスで Windows版と Mac版を利用する事が可能になった以上、VBAプログラマーは今まで以上に互換性に気をつける必要があるようです。

Next Previous

Excel 2019 for Mac VBA での画像の扱い

December 4, 2020
excel vba Mac

Excel 2019 for Mac でのユーザーフォーム

December 4, 2020
excel フォーム データ入力 vba Mac

Excel 2019 for Mac VBE での日本語入力

December 4, 2020
excel vba Mac