excel - 如何修复 vba 查找功能上的突然运行时错误“1004”?
问题描述
在部分代码中,我需要找到某个字符串出现在哪一行中,代码中断抛出“1004”错误。这突然开始,最初的代码没有问题。选项显式打开并定义了所有变量!zRow 应该返回最后一行,xSelectC 确实是需要在范围内搜索的字符串。
我尝试过使用 application.match 的方法 - 出现同样的错误,我也尝试用 Range 对象替换(Dim objRng as Range,Set objRng = ws3.Cells(1, "B")),但没有运气。
最后,我使用了 For 循环方法并且它有效,但由于这只是更大代码的一部分,并且有相当多的部分使用相同的方法,我想避免 for 循环,实际上通常理解为什么突然,这个“1004”开始出现。
vRow = ws3.Range("B1:B" & zRow + 1).Find(What:=xSelectC, After:=ws3.Cells(1, "B"), SearchDirection:=xlNext).Row
它不是(例如)返回第 1244 行的数量,而是抛出“1004”。
解决方案
您应该采取的一般方法是将 Find 返回到 Range 变量中,测试该变量的 Not Nothing,然后才引用其属性。
就像是
Dim rng as Range
Dim research as Range, rAfter As Range
' ...
Set rSearch = ws3.Range("B1:B" & zRow + 1)
Set rAfter=ws3.Cells(1, "B")
Set rng = rSearch.Find(What:=xSelectC, After:=rAfter, SearchDirection:=xlNext)
If rng is Nothing Then
' nothing found, what now?
Else
vRow = rng.Row
' rest of your code
End If
请注意,您应该显式设置参数 LookIn、LookAt、SearchOrder 和 MatchBy,因为每次调用 Find 时它们都会被代码或用户保存。未能设置它们可能会导致意外行为, 请参见此处
推荐阅读
- reactjs - 如何在 React 服务工作者中使用 process.env
- javascript - 如何将JSON中的值分配给javascript中的变量
- html - 如何在具有浮动元素的容器内垂直居中元素,该浮动元素有时会影响容器的最终高度?
- jquery - 将下拉菜单中的值拉入 API url
- c# - C# 中可为空的日期时间列的 InvalidCastException
- python - ValueError:时间数据 '19/06/18 10:40:01' 与格式 '%d/%m/%Y %H:%M:%S' 不匹配
- python-3.x - 使用 lambda 将字典映射到熊猫系列
- python - 每次单击按钮时如何更改 random_number 变量?
- arduino - Arduino,来自 BT-Module 的输入正在堆叠和添加
- python - 如何在 Python 中对值进行分组和聚合(使用 np.sum)对它们进行排序?