【发布时间】:2014-05-09 05:29:42
【问题描述】:
在我的代码中,我声明了这些变量:
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
但是,所述变量不是对象,所以这样做会引发“需要对象”编译错误。
对此的任何帮助将不胜感激。如果您不确定如何修复它,那么任何解决方法或获取单元格的列号和行号的替代方法将不胜感激。
【问题讨论】:
-
将您的“Dim”更改为三个 Dim,每个 Dim 只有一个变量名称和类型。然后再试一次。如果仍然有错误,那么它在哪一行?参考:msdn.microsoft.com/en-us/library/office/…
-
您的错误最可能的问题是
Find返回Nothing,即字符串"Field Name"或"Datatype"未找到 -
看看你的其余代码会很好,因为有时“未闭合”循环或 with 语句会导致这种错误。但我同意 simoco 的观点,因为您的 Find 可能什么也没找到。
-
另外,一旦你解决了这个错误,你应该重新考虑将你的变量声明为整数类型。 Column 应该没问题,但是如果您使用的是 Excel 2007+ 版本,则有超过 32,768 行;因此,如果您感兴趣的行更靠后,您将收到溢出错误。
-
另一个批评:Dim Field_Name, Datatype, row As Integer 仅将“行”声明为整数;另外两个将是 Variant 类型。查看帮助以获取有关 Dim 语句的信息。
标签: vba excel vb6 excel-2013