[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]
『variant の使い方について』(白音)
以下のように
関数から、処理をして該当すれば
POINTAPIで返し、該当しなければ
nothing で返したいのですが
どうすればよいのでしょうか?
Private Type POINTAPI
x As Long
y As Long
End Type
function get as variant
if 〜
get.x = 1 get.y = 1 exit function : end if
set get = nothing
end function
いったん別に代入してから
Dim pnt As POINTAPI
pnt.x = 1
pnt.y = 1
get = pnt
としてもできません。
set get = pnt
としてもできません。
< 使用 Excel:Excel2019、使用 OS:Windows10 >
残念ながらVariant型にユーザー定義型は代入できませんので....
代替案を考える必要があります。 方向性としては、 a) ユーザー定義型を使わないで、クラスを代替に使う方法 b) ユーザー定義型をつかって、初期値代入に失敗したときに分かるようにする方法
たぶんAPIを使いたいのでしょうから、ユーザー定義型を使う前提として、 b)の方法は、こんな感じになります。
Private Enum GetPointResult
FAILURE = 0
SUCCESS = 1
End Enum
Private Type POINTAPI
x As Long
y As Long
End Type
Sub test()
Dim p As POINTAPI, tmp As POINTAPI
If GetPoint(tmp) = SUCCESS Then
p = tmp
Else
MsgBox "Pointの取得に失敗しました"
End If
End Sub
Private Function GetPoint(ByRef p As POINTAPI) As GetPointResult
Dim newP As POINTAPI
If 条件 Then
newP.x = 1
newP.y = 1
p = newP
GetPoint = SUCCESS
Else
GetPoint = FAILURE
End If
End Function
(´・ω・`) 2023/02/27(月) 15:46:45
既に明解な回答があります。 参考情報です。
https://excel-ubara.com/excelvba4/EXCEL_VBA_441.html
を参照してください。 下記のように書かれています。 | ユーザー定義型をバリアント(Variant)変数に代入するとエラーとなります。 | VBAリファレンスには、 | (Variant 型はユーザー定義型をサポートするようになりました)。 | このように書かれていますが、 | これは、ActiveXプロジェクトやタイプライブラリの構造体の事をさしていると思われます。 | VBA内で定義した構造体を、バリアント(Variant)変数に代入することはできません。
私も | (Variant 型はユーザー定義型をサポートするようになりました)。 というVBAリファレンスに騙されました。実際に機能しないので使えませんね。
(abc) 2023/02/27(月) 15:50:54
Public Type GetPOINT
success As Boolean 'Trueなら有効(x,yを使える)、Falseなら無効
x As Long
y As Long
End Type
(白音) 2023/02/28(火) 16:40:04
[ 一覧(最新更新順) ]
YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki.
Modified by kazu.