7yp*_*oid 10 vb6 excel vba excel-vba excel-2013
在我的代码中,我声明了这些变量:
Dim Field_Name, Datatype, row As Integer
Run Code Online (Sandbox Code Playgroud)
然后,在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
Run Code Online (Sandbox Code Playgroud)
但是,该代码抛出"对象变量或未设置块变量"运行时错误.根据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
Run Code Online (Sandbox Code Playgroud)
但是,所述变量不是对象,因此这样做会抛出"Object required"编译错误.
任何有关这方面的帮助将不胜感激.如果您不确定如何修复它,那么获取单元格的列号和行号的任何变通方法或替代方法都将非常感激.
小智 11
即使这是一个老问题,我也想说些什么.
我在使用该.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
Run Code Online (Sandbox Code Playgroud)
简化答案:
您的.Find调用引发错误。
只需在该行中添加“ Set”即可解决该问题。即..
Set Datatype = Worksheets(i).UsedRange.Find("Datatype").Column
Run Code Online (Sandbox Code Playgroud)
如果没有“设置”,则试图将“无”分配给变量。“无”只能分配给一个对象。
您可以在这里停止阅读,除非您想了解关于代码的所有其他(有效的,值得的)大惊小怪的事情。
为了解释所有(必要的)代码检查,您的Dim语句是错误的。前两个变量没有被“类型化”,并最终成为变量。具有讽刺意味的是,这就是我刚才描述的解决方案起作用的原因。
如果您决定清理该Dim语句,则将DataType声明为变量。
Dim DataType as variant
Run Code Online (Sandbox Code Playgroud)
下面的代码怎么样:
For i = 1 to 1 ' change to the number of sheets in the workbook
Set oLookin1 = Worksheets(i).UsedRange
sLookFor1 = "Field Name"
Set oFound1 = oLookin1.Find(What:=sLookFor1, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not oFound1 Is Nothing Then
Field_Name = oFound1.Column
RRow = oFound1.Row +1
' code goes here
Else
Msgbox "Field Name was not found in Sheet #" & i
End If
Set oLookin2 = Worksheets(i).UsedRange
sLookFor2 = "Datatype"
Set oFound2 = oLookin2.Find(What:=sLookFor2, LookIn:=xlValues, LookAt:=xlWhole, MatchCase:=False)
If Not oFound2 Is Nothing Then
DataType = oFound2.Column
' code goes here
Else
Msgbox "Datatype was not found in Sheet #" & i
End If
Next i
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
74521 次 |
| 最近记录: |