对象的多重声明,他们设置 "empty"

Multiple delaration of objects, they set "empty"

我设置了多个Worksheet对象,只设置了最后一个对象Nothing,前X是empty

多行声明有效

Dim ws1, ws2 As Worksheet

If ws1 is nothing then
If ws1 = "" then
If ws1 = "Empty" then
If ws1 = vbEmpty then
If IsEmpty(ws1) then
If IsNull(ws1) then

    'tried all of these but get
    'runtime error


If ws2 is nothing then

    'works fine
Dim ws1 As Worksheet, ws2 As Worksheet

If ws1 is nothing then

    'works fine

If ws2 is nothing then

    'works fine

由于 Pᴇʜ 的回答而跟进:

Dim ws1, ws2 As Worksheet

If ws1 Is Nothing Or IsEmpty(ws1) then

    'runtime error

If IsEmpty(ws1) then

    'works fine

If ws2 Is Nothing then

    'works fine

runtime error 424

我只是想通过多行声明让代码更简洁,也许这是不可能的

结论: 我们必须分别声明每个变量! 第一个答案中的更多详细信息

"I've set multiple 'worksheet' objects"

不,你没有。

如果你声明

Dim ws1, ws2 As Worksheet

那么 ws2Worksheet 类型,但 ws1Variant 类型,因为您没有为第一个变量指定类型。因此 ws1 不是一个对象,除非你将它设置为一个,而 If ws1 Is Nothing Then 失败,因为它只能与对象一起使用。

一模一样
Dim ws1 As Variant, ws2 As Worksheet

如果你在一行中声明多个变量(在VBA中)你仍然需要为每个变量指定一个类型(或者它将是Variant 默认情况下):

Dim ws1 As Worksheet, ws2 As Worksheet

注:
这仅在 VBA 中有效。如果您还使用 VB.NET 请小心,因为 Dim a, b As Long 会将 both 变量定义为 Long!在 VBA 中没有!


跟进回答:

下面的If语句…

Dim ws1, ws2 As Worksheet
If ws1 Is Nothing Or IsEmpty(ws1) then

错误,因为在带有 Or/And 运算符的 If 语句中,无论其他测试的结果如何,总是会执行所有测试。所以在这种情况下,它会同时测试 ws1 Is NothingIsEmpty(ws1).

第一个错误是因为 ws1Variant 而不是对象,但 Is Nothing 仅适用于对象。因此整个语句错误。