如何在VBA中使用As声明具有指定类型的多个变量?

Kou*_*ura 2 excel vba declaration variable-declaration

根据Microsoft的本文档,可以使用以下代码来确保:

a,b和c均为Single;x和y均为Double

Dim a, b, c As Single, x, y As Double, i As Integer  
> a, b, and c are all Single; x and y are both Double  
Run Code Online (Sandbox Code Playgroud)

其背后的逻辑如下

通过As为声明的每个变量使用单独的子句,可以为不同的变量指定不同的数据类型。每个变量采用在As变量名部分之后遇到的第一个子句中指定的数据类型。

但是,当我检查调试器或MsgBox VarType(a) 输出时,情况并非如此。

在此处输入图片说明

正如你所看到的,似乎As只是工作中的变量本身前右,即,cyi。所有其他均为Variant / Empty,并VarType返回0。

这仅仅是文档有误,还是我遗漏了一些明显的东西?

适用于应用程序7.1.1056 Excel 2016的Microsoft Visual Basic(Windows 10)

FFF*_*fff 7

在 VBA 中,当您声明

Dim a, b, c As Single
Run Code Online (Sandbox Code Playgroud)

它所做的相当于:

Dim a As Variant, b As Variant, c As Single
Run Code Online (Sandbox Code Playgroud)

我相信最佳实践是始终在单独的行中声明变量。它可以防止此错误,并且还可以更快地扫描代码。所以代码看起来像这样:

Dim a As Single
Dim b As Single
Dim c As Single
Run Code Online (Sandbox Code Playgroud)


jsh*_*ran 6

您链接到的文档没有错,但是是为VB.NET而非VBA编写的。

如您所见,在VBA中,所有未紧随其后的变量声明As <type>将是Variant

因此,您需要编写:

Dim a As Single, b As Single, c As Single, x As Double, y As Double, i As Integer
Run Code Online (Sandbox Code Playgroud)

  • 另请参阅VBA的正确文档:[Dim语句](https://docs.microsoft.com/zh-cn/office/vba/language/reference/user-interface-help/dim-statement) (2认同)
  • 这是一个疯狂的语言功能。 (2认同)
  • 一直想知道这个问题,并认为我最终会做一些检查并找出答案 - 您的回答使这变得简单,并给出了清晰、明确的答案,谢谢!// 另外,感谢 @Pᴇʜ 提供 Dim 文档的链接。 (2认同)