Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel 对象的多个增量,它们设置为“空”_Excel_Vba_Object_Worksheet - Fatal编程技术网

Excel 对象的多个增量,它们设置为“空”

Excel 对象的多个增量,它们设置为“空”,excel,vba,object,worksheet,Excel,Vba,Object,Worksheet,我设置了多个工作表对象,只有最后一个对象设置为Nothing,第一个X为空 多行声明正在工作 将ws1、ws2标注为工作表 如果ws1什么都不是,那么 如果ws1=那么 如果ws1=空,则 如果ws1=vbEmpty,则 如果我是空的,那么 如果为NullWS1,则 “我试过所有这些,但都失败了 '运行时错误 如果ws2什么都不是,那么 “很好 将ws1标注为工作表,将ws2标注为工作表 如果ws1什么都不是,那么 “很好 如果ws2什么都不是,那么 “很好 因p的回答而进行跟进ᴇʜ Dim w

我设置了多个工作表对象,只有最后一个对象设置为Nothing,第一个X为空

多行声明正在工作

将ws1、ws2标注为工作表 如果ws1什么都不是,那么 如果ws1=那么 如果ws1=空,则 如果ws1=vbEmpty,则 如果我是空的,那么 如果为NullWS1,则 “我试过所有这些,但都失败了 '运行时错误 如果ws2什么都不是,那么 “很好 将ws1标注为工作表,将ws2标注为工作表 如果ws1什么都不是,那么 “很好 如果ws2什么都不是,那么 “很好 因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
运行时错误424

我只是想用多行声明使代码更干净,也许这是不可能的

结论: 我们必须分别声明每个变量! 有关详情,请参阅第一份答覆

我设置了多个“工作表”对象

不,你没有

如果你申报

Dim ws1, ws2 As Worksheet
那么ws2属于工作表类型,但ws1属于Variant类型,因为您没有为第一个变量指定类型。因此,除非将ws1设置为1,否则它不是对象。如果ws1为Nothing,则会失败,因为它只能与对象一起使用

这和

Dim ws1 As Variant, ws2 As Worksheet
如果在VBA中的一行中声明多个变量,则仍然需要为每个变量指定一个类型,否则默认情况下它将是Variant:

Dim ws1 As Worksheet, ws2 As Worksheet
注: 这仅在VBA中有效。如果您也使用VB.NET,请务必小心,因为有Dim a,b As Long将两个变量定义为Long!在VBA中,它不是

跟进答覆:

下面的If语句

Dim ws1, ws2 As Worksheet
If ws1 Is Nothing Or IsEmpty(ws1) then
错误,因为在带有或/和运算符的If语句中,无论其他测试的结果如何,所有测试都将执行。所以在本例中,它测试ws1为Nothing和IsEmptyws1

第一个错误是因为ws1是Variant,不是一个对象,而是Nothing,它只适用于对象。因此,整个语句都有错误

我设置了多个“工作表”对象

不,你没有

如果你申报

Dim ws1, ws2 As Worksheet
那么ws2属于工作表类型,但ws1属于Variant类型,因为您没有为第一个变量指定类型。因此,除非将ws1设置为1,否则它不是对象。如果ws1为Nothing,则会失败,因为它只能与对象一起使用

这和

Dim ws1 As Variant, ws2 As Worksheet
如果在VBA中的一行中声明多个变量,则仍然需要为每个变量指定一个类型,否则默认情况下它将是Variant:

Dim ws1 As Worksheet, ws2 As Worksheet
注: 这仅在VBA中有效。如果您也使用VB.NET,请务必小心,因为有Dim a,b As Long将两个变量定义为Long!在VBA中,它不是

跟进答覆:

下面的If语句

Dim ws1, ws2 As Worksheet
If ws1 Is Nothing Or IsEmpty(ws1) then
错误,因为在带有或/和运算符的If语句中,无论其他测试的结果如何,所有测试都将执行。所以在本例中,它测试ws1为Nothing和IsEmptyws1


第一个错误是因为ws1是Variant,不是一个对象,而是Nothing,它只适用于对象。因此,整个语句都有错误。

好的,但是为什么下面的if语句失败:``如果ws_1为Nothing或IsEmtyws_1,那么'做点什么'获取运行时错误结束如果```@Patrick因为Nothing需要一个对象,但是如果ws1是Variant,它不是一个对象,因此失败。@Patrick在带有或和运算符的if语句中表示所有测试都已执行。如果其中一个出错,则整个If语句都会出错。因为没有错误,所以整个陈述都不起作用,但是为什么下面的if语句失败:``如果ws_1为Nothing或IsEmtyws_1,那么'做点什么'获取运行时错误结束如果```@Patrick因为Nothing需要一个对象,但是如果ws1是Variant,它不是一个对象,因此失败。@Patrick在带有或和运算符的if语句中表示所有测试都已执行。如果其中一个出错,则整个If语句都会出错。因为没有任何错误,所以整个语句都不起作用。