对象的多重声明,他们设置 "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
那么 ws2
是 Worksheet
类型,但 ws1
是 Variant
类型,因为您没有为第一个变量指定类型。因此 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 Nothing
和 IsEmpty(ws1)
.
第一个错误是因为 ws1
是 Variant
而不是对象,但 Is Nothing
仅适用于对象。因此整个语句错误。
我设置了多个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
那么 ws2
是 Worksheet
类型,但 ws1
是 Variant
类型,因为您没有为第一个变量指定类型。因此 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 Nothing
和 IsEmpty(ws1)
.
第一个错误是因为 ws1
是 Variant
而不是对象,但 Is Nothing
仅适用于对象。因此整个语句错误。