■101458 / inTopicNo.2) |
Re[1]: Variant の使い方 |
□投稿者/ 魔界の仮面弁士 (3572回)-(2023/02/27(Mon) 15:48:48)
|
■No101457 (白音 さん) に返信 > function get as variant get は予約語なので、get という名前の Function は定義できません。
また、ユーザー定義型を Variant で返すことは(基本的には)できません。
クラスであれば Variant や Object で返すことができますし、Nothing も渡せます。 ユーザー定義型をクラスモジュールに変更することを検討してみてください。
もしくは、戻り値を配列で返すようにするとか……「As Variant()」ないしは「As Variant」のように。 要素数 0 な Variant 配列(あるいは Empty とか)であれば、該当なしの意味とし、 要素数 2 な Variant 配列であれば、それぞれが x As Long, y As Long の意味として扱うなど。
「As Long()」にできれば手っ取り早いのですが、VBA の場合、 要素数 0 の配列を作れないんですよね…。
一応、Byte()、String()、Object(), Variant() なら空の配列を作れるのですが、 それ以外の型の場合、要素数ゼロの配列は API を併用しないと作れません。 https://qiita.com/nukie_53/items/9a7a1eb07eff50ae1e8b
あるいは、64bit 版 VBA であれば、LongLong 型として返すようにして、 上位32bit と下位32bit を x As Long, y As Long の意味として使う…という手もありますが、 正直分かりにくいと思います。
もしくは、ユーザー定義型の宣言をちょっと拡張して Public Type POINTINFO HasValue As Boolean 'Trueならx,yを使える、Falseなら無効値扱い x As Long y As Long End Type などのように、管理フィールドを追加するとか。
> 関数から、処理をして該当すれば > POINTAPIで返し、該当しなければ > nothing で返したいのですが > どうすればよいのでしょうか?
そもそもユーザー定義型に Nothing は渡せませんよ。
また、ユーザー定義型を Variant に渡すには、VB6 が必要です。VB5 以下や VBA では無理ですね。 ユーザー定義型を返す Variant を扱うには、タイプライブラリを用いて、 該当構造体をレジストリに登録しておく必要があるため、VBA 単体では扱えません。
|
|