3

私の同僚を引用するには:

VBA のすべての変数はバリアントですが、vartype が異なります。

Dim x      '--->variant with vartype = vbEmpty  
x= "hello" '--->vartype changed from vbEmpty to vbString and value assigned  
x= 1       '--->vartype  changed to vbInteger

Dim x as String  '--->variant with vartype = vbEmpty is created and then vartype changed to vbString  
x= "hello"       '--->vartype = vbString  
x=1              '--->because x was declared explicitly with String it will try to implicitly convert 1 to string, so, x will remain vbString

私の主な論点はDim x as String、彼の声明にどのように適合できるかということall variables in VBA are variantsです. バリアントは作業効率が悪いので、なぜすべてがそこから始まり、変換されるのでしょうか。

VBA のすべての変数はバリアントですか?
誰かがドキュメントを見つけたり、何らかの方法で答えを明確に証明するコードを提供したりできますか?


編集

彼は、上記のことを証明しようとする手始めとして、次のことを提唱しましたが、それが証明しているのは、それらがすべて文字列であることだけだと思います。

Sub aaa()

Dim str_str As String
Dim str_var

str_str = "aaa"
str_var = "aaa"
str_xxx = "aaa"

MsgBox VarType(str_str) & ": " & TypeName(str_str)
MsgBox VarType(str_var) & ": " & TypeName(str_var)
MsgBox VarType(str_xxx) & ": " & TypeName(str_xxx)

End Sub
4

3 に答える 3

1

完全を期すために(上記に加えて):

あなたの友人が話していることは、おそらくこれです(下の例):

http://office.microsoft.com/en-001/access-help/vartype-function-HA001228932.aspx

これは VBA 関数であり、動的型キャストを利用したい場合に役立つツールにすぎません。

動的型付けのみを使用し、リンクの例を「常に」適用する場合 (VBA の悪い習慣)、すべての変数がバリアントとして開始されます (強くお勧めしません)。

おそらく彼は、VBA の静的型付けを、静的型付けを使用しない Javascript のようなプログラミング言語と混同しているのでしょう。JS は暗黙的な型変換を行います: var i = 0 ~> JS ランタイムによって数値として暗黙的に型指定されます。

注: VBA では静的型付けが推奨されていますが、実際には VBA プログラマーが動的型付けを使用する場合があります (変数の型が実行前にわからない場合)。

于 2013-10-17T15:11:28.417 に答える