雑魚コンサルの個人的な備忘

エクセル大好き少年のメモ

【EXCEL】【VBA】MACでの使用を想定したときの留意事項

MACExcelのマクロを動かす想定がなくて、ツールが動かないあるあるのメモ。
気づいたら追記。

パスの区切り文字が違う

Windowsの場合は\(バックスラッシュ)、MACの場合は/
なので、マクロの中でファイルパスを設定するときなんかは、区切り文字を分けて記載しないといけない。
僕は区切り文字をハードコードしてたけど、一応変数に格納するようにはしている。

ちなみに、IF マック Then "/" Else "\"みたいなことはわざわざやらなくてもよくて、
Application.PathSeparatorで取得が可能。
毎回上記で取得してもいいし、Applicationとか書くのめんどくさいときは変数に格納してる。

Dir()でファイル一覧が取得できない

これはめんどくさい。Dir()の再帰処理で特定のフォルダ配下のファイル一覧だったり特定拡張子のファイル一覧だったりを取得することは非常に多いと思うけど、それができない。
Dir関数自体は使えるけど、最初のファイルしか読み込めない仕様なのか、再帰処理ができない。

調べてみるとMacScript関数なるものを使って、AppleScriptを動かさないといけないみたい。
MacScript(varAppScrpt)みたいな感じで。
つまり、WinとMacで完全に別々の処理をするようなコード作らないとダメ。

参照設定で追加しちゃダメ

最初から意識してれば特に困らないけど、一度作ってたものを後からMACに対応させるとかしようとするとコーディングし直さないといけなくなるのでそれなりにイライラする。
まあよく考えればそれも当然で、参照設定で追加するようなものって、WINDOWSフォルダに格納されているようなファイルが元なので、そりゃMACで動くはずがない。

f:id:himatuna:20200710082227p:plain
参照設定

また、同様にユーザーフォームのコントロールなんかも追加しちゃダメ。
ユーザーフォーム上で↓から選択する

f:id:himatuna:20200710082503p:plain
その他のコントロール(ユーザーフォーム)

↓これ

f:id:himatuna:20200710082617p:plain
コントロールの追加

僕はプログレスバーとかListViewくらいしかよく使うものってないのでそんなに困らない。
ListViewは他で代替する方法が思いつかず、結構めんどくさいコーディングをしてしまったなぁ。。。

ActiveXコントロールが使えない

まあこれは上記とほぼ同じなんだけど。
エクセルブックにマクロ起動用のボタンとか条件選択のチェックボックスを配置することはよくあるけれど、ActiveXコントロールMACでは使えないので、フォームコントロールを使う必要があり

f:id:himatuna:20200710072235p:plain
コントロール

VBAでコントロールの値を操作したりする場合はフォームコントロールが使えないとかなので、注意。
そういうツールはMACでは動かせないと

CreateObjectは使っちゃダメ

まあこれは参照設定追加できないので、当然だけど。
普段CreateObject("Scripting.FileSystemObject")と記載していると、そこまで意識ないかも。
楽だから結構使いたいけど、使わないように。