Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.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
Vba Excel宏赢得';不能在不同的文件中工作_Vba_Excel - Fatal编程技术网

Vba Excel宏赢得';不能在不同的文件中工作

Vba Excel宏赢得';不能在不同的文件中工作,vba,excel,Vba,Excel,我在一个文件中开发了一个excel宏,但当我尝试在另一个相同格式的文件上运行它时,只是数据不同,我出错了。我得到的错误是运行时错误424:在下面的“If del is Nothing Then”行中需要对象 我不明白的是,在使用同一个宏的一个文件中,is如何会丢失对象“del”,而在另一个文件中却没有 有什么想法吗?短暂性脑缺血发作 您不需要。在此处选择,也不需要关闭选择。相反,请执行以下操作: Columns("C:F").ClearContents 每个都相同。选择调用,然后在选择中选择成

我在一个文件中开发了一个excel宏,但当我尝试在另一个相同格式的文件上运行它时,只是数据不同,我出错了。我得到的错误是运行时错误424:在下面的“If del is Nothing Then”行中需要对象

我不明白的是,在使用同一个宏的一个文件中,is如何会丢失对象“del”,而在另一个文件中却没有

有什么想法吗?短暂性脑缺血发作

您不需要
。在此处选择
,也不需要关闭
选择
。相反,请执行以下操作:

Columns("C:F").ClearContents
每个
都相同。选择
调用,然后在
选择中选择成员调用

这将删除恼人的/冗余的/低效的
Select
调用,但不会解决问题


没有声明任何变量。在模块顶部指定
选项Explicit
;VBA将拒绝编译您的代码,直到声明所有变量

例如:

Dim rng As Range
Dim del As Range
既然
del
有一个有效的编译时对象类型(
Range
),那么在运行时,当
为Nothing
检查运行时,它将是一个没有值的
Range
对象引用,
为Nothing
检查将计算为
True

出现“object required”错误的原因是未声明
del
,并且如果没有
Option Explicit
,则允许代码在运行时动态“声明”变量(听起来很酷,但实际上是有害的)-每个未声明的变量都是
变量

虽然
变量
可以保存对象引用,但如果尚未为其分配任何内容,则其类型为
变量/空
,VBA将拒绝将其视为对象引用

这将成功:

If IsEmpty(del) Then

但是
IsEmpty
仅适用于
Variant
。您需要的是使用正确的类型正确地声明所有内容。

代码的其余部分在哪里?如果您在此处发布的内容正是您在新工作簿中粘贴的内容,那么您缺少了代码的顶部。顶部只剩下子IBFormatting()。你没有声明你的变量,Rng,cell,del。它们可能在工作簿中的其他地方公开声明,而不是在新工作簿中公开声明。在原始工作簿vba中搜索当前项目,并搜索Rng、单元格或del。在模块顶部添加显式选项也会很有帮助。
On Error Resume Next
关闭错误处理;由于错误处理从未恢复,因此错误恢复下一条指令中的第二条指令是完全冗余的
del
是一个未声明的变量(另一个工作簿是否在某处声明了它?在模块顶部?),这使它成为运行时
变量
,代码首先以
变量/空
的形式遇到,它不是一个有效的对象引用,可以使用
is Nothing
进行检查。用适当的
作为[type]
子句声明局部变量,[这个]问题会自行解决。使用
选项Explicit
确保您已经声明了所有这些选项。
Dim rng As Range
Dim del As Range
If IsEmpty(del) Then