Excel 2019 for Mac OS 판정 및 AppleScriptTask 사용 방법

3978 단어 VBAExcelMac

Excel 2019 for Mac OS 판정 및 AppleScriptTask 사용 방법



Excel 2019부터 라이센스 체계가 바뀌어 영구 버전의 Windows 버전과 Mac 버전을 모두 설치할 수 있습니다. 또한 Office365에서도 동일한 방식으로 설치할 수 있습니다. OS의 울타리를 넘어 앱을 사용할 수 있게 되는 것은 훌륭한 일입니다만, VBA 프로그래머의 고민이 늘어나는 것도 사실입니다.

Windows판의 CreateObject를 모두 사용할 수 없는 것은 물론, 보안 관련의 다이얼로그에 의해 조작성이 상실되는 일도 고려하지 않으면 안됩니다. 이러한 문제를 피하기 위해 AppleScript를 사용할 수 있습니다.

OS 판정 방법



OS 일로 처리를 바꾸는 이상 판정 방법이 필요합니다. 내가 개발하고 있는 Android 핸디 터미널 앱 Forme 에서는 데이터 관리를 위해 Windows와 Mac 양 OS에 대응한 엑셀 파일 FormaCollector2.xlsm을 포함하고 있습니다. 거기서 이용하고 있는 코드가 이쪽입니다.
If Not Application.OperatingSystem Like "*Mac*" Then
    Windowsの処理
else
    If val(Application.Version) < 15 Then
        Excel2011 for Macの処理
    else
        #If MAC_OFFICE_VERSION >= 15 Then
            Excel2016 for Mac以降の処理
         #end if
    end if
end if

Mac판에서는 Excel2011과 Excel2016 이후의 판정 분할을 MAC_OFFICE_VERSION로 실시하고 있습니다만, Excel2016 이후만을 대응하고 있는 경우는 불필요합니다. 또한 코드가 중복되어 있지만 안정성 중시로 이러한 형태로되어 있습니다.

실제로 이용될 때는 독자 함수로 하는 것을 추천합니다. 나 자신은 언젠가 하려고 생각하면서, 여기까지 방치하고 있습니다만・・・.

이전 방법 : MacScript 함수



Excel2011에서는 VBA 내에 AppleScript를 인라인으로 작성하여 MacScript 함수로 실행할 수 있었지만 Excel2016 이후 보안상의 관점에서 폐지되었습니다. Excel2019에서 실행하면 오류가 발생하지 않지만 항상 FALSE가 돌아옵니다.
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

Excel2019 결과

Excel2011 결과

또한 Windows 버전에서 실행하면 오류가 발생합니다. OS 판정은 반드시 필요합니다.


AppleScriptTask 사용법



이용할 때까지의 순서는 주로 2단계가 됩니다.
  • 스크립트 파일을 ~/Library/Application Scripts/com.microsoft.Excel/에 저장합니다.
  • VBA 내에서 AppleScriptTask에서 스크립트 파일을 호출합니다.

  • 1. 특히 어색합니다. 라이브러리 폴더는 통상 조작으로는 볼 수 없기 때문에, 터미널이나 Finder > 이동(option을 눌러)로부터 이동할 필요가 있습니다.

    배포 측면에서 상당히 장애물이 높습니다. 다음 2.VBA 내에서 AppleScriptTask에서 스크립트 파일을 호출하는 것은 그리 어렵지 않습니다.
    Sub ASTaskTest()
    
    Dim dirpath As String
    
    dirpath = AppleScriptTask("AppleScriptファイル名(拡張子不要)", "スクリプト名", "引数")
    
    End Sub
    

    존재하지 않는 AppleScript 파일을 호출하면 오류가 발생합니다. 이것도 Windows판에서는 에러가 발생하므로 OS 판정은 반드시 필요합니다.


    FormeCollector2.xlsm에서는 스크립트 파일이 없으면 자동으로 작성됩니다. VBA는 라이브러리 폴더에 액세스 할 수 없기 때문에 이동은 사용자가해야하는 것이 어려운 점이지만 별도로 설치 앱을 배포하는 등 궁리하고 있습니다.

    좋은 웹페이지 즐겨찾기