在我的代码中,我声明了这些变量:
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"编译错误.
任何有关这方面的帮助将不胜感激.如果您不确定如何修复它,那么获取单元格的列号和行号的任何变通方法或替代方法都将非常感激.
即使这是一个老问题,我也想说些什么.
我在使用该.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
简化答案:
您的.Find调用引发错误。
只需在该行中添加“ Set”即可解决该问题。即..
Set Datatype = Worksheets(i).UsedRange.Find("Datatype").Column
如果没有“设置”,则试图将“无”分配给变量。“无”只能分配给一个对象。
您可以在这里停止阅读,除非您想了解关于代码的所有其他(有效的,值得的)大惊小怪的事情。
为了解释所有(必要的)代码检查,您的Dim语句是错误的。前两个变量没有被“类型化”,并最终成为变量。具有讽刺意味的是,这就是我刚才描述的解决方案起作用的原因。
如果您决定清理该Dim语句,则将DataType声明为变量。
Dim DataType as variant