このブログは広告及びアフェリエイトプログラムを使用しています。

プライバシーポリシーと免責事項



Excel for MacでのUTF-8テキストファイル出力方法(AppleScriptTask)実践4

April 14, 2023
excel vba Mac Excel for Mac
執筆:EugeneAmnis

Excel for MacでのUTF-8テキストファイル出力方法(AppleScriptTask)実践4

作業の流れの再確認

念の為に作業の流れは以下の通りです。

  1. AppleScriptで保存先とテキストを指定し、実行するとUTF-8形式のテキストファイルを保存するスクリプトファイルを作成する。
  2. 1のスクリプトファイルをExcel VBAのAppleScriptTask仕様に変更し、指定ファルダに保存する。
  3. 応用編:VBA単一で2を実装する。
  4. Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。

今回は4. Excel VBA上でOS判定とスクリプトファイルの存在確認をした上で実行する。を行います。

実践

ここまでくれば話は簡単です。基本的なOS判定は以下のコードとなります。

On Error GoTo 256

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以降の処理(AppleScriptTaskをここで使用する)
         #end if
    end if
end if

OSがMacであった場合のスクリプトファイルの存在確認はVBAではよく利用する***on error ***を利用します。エラーが発生し、OSがMacであった場合にはスクリプトのインストールを開始する方法をとっています。

Exit Sub
256
    If Application.OperatingSystem Like "*Mac*" Then
        'インストール措置またはスクリプトファイルのないことを伝える。
    End If

ここでエラー番号で詳細な動作の振り分けを行えば良いのですが、筆者がはじめてこのコードを書いた際にスクリプトが存在しない独自のエラー番号を確認できなかったため、大雑把なままにしています。

もし詳細に判定したい場合はdir関数を利用することが可能かもしれません。ただパスの指定に癖があるのとアクセス制限が発動する可能性が高いことを鑑みると試す気にはならないのが本音です。

一部のパスに対してのアクセス制限の簡易試験をしてみました。こちらからお読み下さい。

完成

すべてのコードは以下となります。

AppleScript
on st8(txtval)
	if txtval = "" then
		return
	end if
	tell application "Finder"
		activate
		try
			set dpath to choose file name with prompt "Input New FileName." default name "newdata.csv"
			set spath to (dpath as string)
			if (offset in spath of ".") = 0 then
				set spath to spath & ".txt"
			end if
			try
				set tfile to open for access file spath with write permission
				set eof of tfile to 0
				write txtval to tfile as «class utf8»
			end try
			close access tfile
		on error number err_num
			false
		end try
	end tell
	
end st8
VBA
sub saveUTF8txt()
Dim as txtValue as String
On Error GoTo 256

txtValue = ActiveCell.Value

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
            Dim Res as String
            Res = AppleScriptTask("AppleScriptファイル名","st8",txtValue)
            'この形にしないと構文エラーが出やすい
         #end if
    end if
end if

Exit Sub
256
    If Application.OperatingSystem Like "*Mac*" Then
		'インストール措置
	End If
end sub

実行結果

実行してみるとAppleScriptのファイル保存ダイアログが表示され、保存場所と名前を指定することでUTF-8形式のテキストファイルが保存されていることが確認できます。

この方法でははじめてアクセスするパスでもアクセス権の譲渡確認ダイアログが表示されないのがメリットだと言えます。

長い記事になってしまい、読みづらくなってしまったかもしれませんが、他の機能を持ったVBAもほぼ同じような手順で作成することができます。

Next Previous

MailForm

excel vba Mac Excel for Mac

Home

Excel開発にリファレンスは必要か?

October 26, 2024
excel Excel for Mac データ入力 操作 QC KAIZEN

Mac版VBAでファイルを開く際のWindows版との違いについてGeminiに聞いてみた

October 14, 2024
AI excel Excel for Mac Mac

GeminiにExcel for Macについて聞いてみた(AppleScriptTask編)

October 9, 2024
AI excel Excel for Mac Mac