電気ウナギ的○○

About Home

Declare ステートメントには PtrSafe オプションを付けよう

shinoda (2021年2月26日 11:19)
もう Excel VBA ネイティブな人たちの間では、何年も前に話題になったであろう今更な話(笑)。

お客さんに送ってもらった Excel シートで「コンパイルエラー:このプロジェクトのコードjは、64 ビット システムで使用するために更新する必要があります。Declare ステートメントの確認及び更新を行い、次に Declare ステートメントに PtrSafe 属性を設定してください。」のエラーメッセージが表示される。

セルの編集をすると実行される VBA マクロがあり、それがエラーになっているようだ。

引っかかっているのは、メッセージにあるように 

Private Declare Function SHBrowseForFolder Lib "SHELL32" (lpbi As BROWSEINFO) As Long
Private Declare Function SHGetPathFromIDListLong Lib "SHELL32" Alias "SHGetPathFromIDList" (ByVal pIDL&, ByVal lpStr$) As Long
Private Declare Function GetForegroundWindow Lib "USER32" () As Long

この部分。

メッセージに書かれているように、PtrSafe オプションを追加してやるだけでいい。

Private Declare PtrSafe Function SHBrowseForFolder Lib "SHELL32" (lpbi As BROWSEINFO) As Long
Private Declare PtrSafe Function SHGetPathFromIDListLong Lib "SHELL32" Alias "SHGetPathFromIDList" (ByVal pIDL&, ByVal lpStr$) As Long
Private Declare PtrSafe Function GetForegroundWindow Lib "USER32" () As Long

これでエラーは出なくなる。

Declare ステートメントで Dynamic Link Library(DLLファイル)内の外部プロシージャへの参照を宣言するのだが、64bit版の VBA では必ず PtrSafe を付けないといけないらしい。「この外部プロシージャが 64bit版 Office で実行しても安全よ」ということを表明するだけのオプションだと聞いたことがあるが、本当なのか、どうなのか?(笑)
まあ、64bit版で動かして安全なのかどうなのかは・・・知らんけど(^^;;;
指定せんと動かんからな。あとで、「あんたが『安全』だと表明して PtrSafe オプション設定したんでしょ!」とか言われたら困るけどな(^^;

ちなみに、この Excel シートを 64bit版でも 32bit版でも参照するのであれば、

#If VBA7 And Win64 Then

    Private Declare PtrSafe Function SHBrowseForFolder Lib "SHELL32" (lpbi As BROWSEINFO) As Long
    Private Declare PtrSafe Function SHGetPathFromIDListLong Lib "SHELL32" Alias "SHGetPathFromIDList" (ByVal pIDL&, ByVal lpStr$) As Long
    Private Declare PtrSafe Function GetForegroundWindow Lib "USER32" () As Long

#Else

    Private Declare Function SHBrowseForFolder Lib "SHELL32" (lpbi As BROWSEINFO) As Long
    Private Declare Function SHGetPathFromIDListLong Lib "SHELL32" Alias "SHGetPathFromIDList" (ByVal pIDL&, ByVal lpStr$) As Long
    Private Declare Function GetForegroundWindow Lib "USER32" () As Long

#End If 

このように条件付きコンパイルをしてやる必要がある。

今回は俺のPC+Office(64bit環境)でしか使わないので、PtrSafe をべた書きで追加しただけということ。

電気ウナギ的○○

電気ウナギ的○○

About Back

コメント(0)

電気ウナギ的○○

電気ウナギ的○○

About Back

トラックバック(0)

トラックバックURL: https://blog.netandfield.com/mt/mt-tb.cgi/5856

電気ウナギ的○○

About This Site

電気ウナギ的○○
岩国在住。広島で働く超零細IT企業社長のいわゆる社長日記。
何か、酒と食い物のことばかり書いているようで・・・お察しのとおり、肥満体です:-)


2011/06/24
iPhone用サイト公開

Create with jQuery, jQTouch.


CLOSE