当前位置:  开发笔记 > 编程语言 > 正文

当没有Object时,VBA for Excel会抛出"对象变量或未设置块变量"

如何解决《当没有Object时,VBAforExcel会抛出"对象变量或未设置块变量"》经验,为你挑选了2个好方法。

在我的代码中,我声明了这些变量:

Dim Field_Name, Datatype, row As Integer

然后,在For循环中,我有这个代码:

Field_Name = Worksheets(i).UsedRange.Find("Field Name").Column
Datatype = Worksheets(i).UsedRange.Find("Datatype").Column
row = Worksheets(i).UsedRange.Find("Field Name").row + 1

但是,该代码抛出"对象变量或未设置块变量"运行时错误.根据API,Range.Column和Range.row属性是只读的Long.我已经尝试将变量的数据类型设置为Long,但没有成功.看起来VBA期待我这样做

Set Field_Name = Worksheets(i).UsedRange.Find("Field Name").Column
Set Datatype = Worksheets(i).UsedRange.Find("Datatype").Column
Set row = Worksheets(i).UsedRange.Find("Field Name").row + 1

但是,所述变量不是对象,因此这样做会抛出"Object required"编译错误.

任何有关这方面的帮助将不胜感激.如果您不确定如何修复它,那么获取单元格的列号和行号的任何变通方法或替代方法都将非常感激.



1> 小智..:

即使这是一个老问题,我也想说些什么.

我在使用该.Find方法时遇到同样的问题.我来到这个问题,所以其他人也会这样做.

我找到了一个解决问题的简单方法:

什么Find时候找不到它返回的指定字符串Nothing.之后直接调用任何内容Find都会导致此错误.所以,你.Column.row将抛出一个错误.

在我的情况下,我想要一个Offset找到的单元格并以这种方式解决它:

Set result = Worksheets(i).Range("A:A").Find(string)
    If result Is Nothing Then
        'some code here
    ElseIf IsEmpty(result.Offset(0, 2)) Then
        'some code here
    Else
        'some code here
    End If



2> John Joseph..:

简化答案:

您的.Find调用引发错误。

只需在该行中添加“ Set”即可解决该问题。即..

Set Datatype = Worksheets(i).UsedRange.Find("Datatype").Column

如果没有“设置”,则试图将“无”分配给变量。“无”只能分配给一个对象。

您可以在这里停止阅读,除非您想了解关于代码的所有其他(有效的,值得的)大惊小怪的事情。

为了解释所有(必要的)代码检查,您的Dim语句是错误的。前两个变量没有被“类型化”,并最终成为变量。具有讽刺意味的是,这就是我刚才描述的解决方案起作用的原因。

如果您决定清理该Dim语句,则将DataType声明为变量。

Dim DataType as variant

推荐阅读
家具销售_903
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有