[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『VBAでWin32APIを動的に呼び出すには』(:;:;:;:;:;)
VBAでは、DLLの関数を使用する時に、Declareステートメントで最初に宣言するようになっています。使う関数が変わる(例えば、BitBltを使っている所をAlphaBlendに置き換える)度に宣言文も変更していくのは大変で、ミスも増えます。宣言をせずにコードの中で動的に呼び出す方法はないでしょうか。
< 使用 Excel:Excel2013、使用 OS:Windows10 >
というか、宣言文を変えるのは使用するAPIが変わる今回だけであり、将来は変更しないと思うのですが、いかがでしょうか? API自身の引数体系がコロコロ変わる訳ではないですよね。 面倒でも、全てのマクロを書き換えるしか無いのではないかと思います。
以前のExcelならば、肝心のコードはサーバ等に置き、マクロ自身でマクロを書き換える手法で、1つ変えれば利用している全てが変わる、なんて事が実現できたのですが、近年はExcelのセキュリティが向上し、デフォルトでは自身の書き換えができなくなってしまいました。(今でもセキュリティレベルを下げれば動作しますが、お薦めはしていない方法です)
または、環境変数を使って、#If 文で、以下のように使用する Declare を変える事もできますが、やりたいのはこういう事でしょうか?
(32bit環境と64bit環境で、API宣言を変える例)
#If VBA7 Then Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr) #Else Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long) #End If (???) 2017/08/03(木) 09:14
>やりたいのはこういうことでしょうか?
>#If VBA7 Then
> Private Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As LongPtr)
>#Else
> Private Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
>#End If
コンパイル時ではなく、実行時に変数の値によって使い分けたいのですが、やはりその場合はすべてはじめに宣言するしかないですかね。
(:;:;:;:;:;) 2017/08/03(木) 10:39
または、シート上ならば、Excelの図形オブジェクトとして画像を貼ってしまえば、これはプロパティに透明度があるのですが、この方法では目的を果たせませんかね?(API使うくらいだし、おそらくUserForm上の話であり、駄目なのかなぁ、とは推測しますが…)
(???) 2017/08/03(木) 10:50
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.