Excel 2019 for Mac OS 판정 및 AppleScriptTask 사용 방법
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단계가 됩니다.
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
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
1. 특히 어색합니다. 라이브러리 폴더는 통상 조작으로는 볼 수 없기 때문에, 터미널이나 Finder > 이동(option을 눌러)로부터 이동할 필요가 있습니다.
배포 측면에서 상당히 장애물이 높습니다. 다음 2.VBA 내에서 AppleScriptTask에서 스크립트 파일을 호출하는 것은 그리 어렵지 않습니다.
Sub ASTaskTest()
Dim dirpath As String
dirpath = AppleScriptTask("AppleScriptファイル名(拡張子不要)", "スクリプト名", "引数")
End Sub
존재하지 않는 AppleScript 파일을 호출하면 오류가 발생합니다. 이것도 Windows판에서는 에러가 발생하므로 OS 판정은 반드시 필요합니다.
FormeCollector2.xlsm에서는 스크립트 파일이 없으면 자동으로 작성됩니다. VBA는 라이브러리 폴더에 액세스 할 수 없기 때문에 이동은 사용자가해야하는 것이 어려운 점이지만 별도로 설치 앱을 배포하는 등 궁리하고 있습니다.
Reference
이 문제에 관하여(Excel 2019 for Mac OS 판정 및 AppleScriptTask 사용 방법), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/EugenesWorks/items/f802a8680836de951ab8텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)