我整个星期都在准备VBA应用程序,我将在今天的会议中使用它。不幸的是,上周一直在运行的代码顺利运行,已决定在周末休息。
我经常得到Object变量或者没有设置块变量运行时错误' 91'从这个声明:
With Sheet5
Set adjrng = .Range(.Cells(.Range("G43:G60").Find(.Range("H39").Value).Row, 10), .Cells(.Range("G43:G60").Find(.Range("H39").Value).Row, 21))
End With
想法是在范围G43:G60的行中设置一个范围,其中H39的值从第10列到第21列匹配。
有人发现了这个问题吗?今天早上我的大脑是紧张和困倦......
非常感谢
本
编辑:
在使用查找和替换后,问题似乎是excel尚未正确计算" lookin"和"查找"范围G43:G60和H39。一个简单的重新计算并没有使excel重新发现内容,但当我使用我的一个输入切换在这些单元格中显示不同的值,并且回到原始它确实设法找到它。
也许使用find这是不好的风格,查找公式通常有这样的hicups或对此有任何其他意见?现在一切都恢复正常,但我害怕再次遇到这些问题。因此,任何提示都会受到赞赏。
编辑:(来自以下评论)
我们有一个动态范围(G43:J60),其中唯一标识符列在G列中,数据列在右侧。如果在范围的数据部分中更改了某些内容,并且列G中的单行标识符与单元格H39中的行匹配,则通过工作表触发sub(),更改intersect(target,adjrng)定义该adjrng是抛出错误的部分find返回null。
答案 0 :(得分:0)
我相信你只是想设置一个范围,希望在G43:G60范围内H39中的值有两个匹配。虽然我避免on Error Resume Next
(永远无法适应破坏某些东西的逻辑,希望能够完成某些事情),但是当我寻找它时,我总是会检查值是否存在。
Dim rwUNIQ as long
Set adjrng = nothing
With Sheet5
if cbool(application.countif(.Range("G43:G60"), .Range("H39").Value)) then
rwUNIQ = application.match(.Range("H39").Value, .Range("G43:G60"), 0)
Set adjrng = .Cells(42 + rwUNIQ, 10).resize(1, 11)
end if
if not adjrng is nothing then
'do something with adjrng
end if
Set adjrng = nothing
End With
检查以确保在继续之前G43:G60中至少有两个H39值。没有进一步的错误控制,因为我们至少计算了其中两个。如果没有,您可能希望使用Else
进行补偿。如果找到单个H39值,您可能还想选择一行。
请记住,.Find
使用上次使用Find时保留的许多参数,无论是在VBA中还是在工作表上的用户中。您确实缺少参数,这些参数指定了Find应该用于继续的选项。例如xlPart或xlWhole,After:= what ?,查看公式或值等等。
编辑:* 修改代码以在H39和.Resize
中查找值的单个实例以扩展宽度(根据OP的评论)。