(我知道这听起来像是一个重复的问题,但我到处寻找这个,我找不到任何关于此事的内容)
我正在努力实现税务申报流程的自动化。基本上,我正在阅读几个工作表并将相关字段填充到主映射表中。然而(这是奇怪的部分),当我第一次编写所有内容时,没有错误,我设法找到了所有内容。保存并重新打开工作簿之后,我不断收到此错误,并且仅针对某些行(在我总共调用.find方法的57次中出现了9次)。
我知道错误意味着.find方法找不到我要找的东西,但我知道该字段存在,因为它在我关闭并重新打开工作簿之前工作得非常好,并且它适用于其余的搜索。有没有人有任何想法?
我检查了我的宏安全设置(一切都已启用),我知道.find方法没有检索任何东西(我输入“if ___ is nothing”语句来验证,受影响的行都没有返回任何内容当被叫时,但我知道我要搜索的字段存在于各自的表格中。
这是抛出错误的一条线:
Range("C7").Select
Set currentRowReference = Worksheets("Stat A").Range("B1:B999").Find("Current year tax losses", LookIn:=xlValues, lookat:=xlPart)
firstCalculation = Worksheets("Stat A").Cells(currentRowReference.Row - 2, "E")
Set currentRowReference = Worksheets("Stat A").Range("A1:A999").Find("Unabsorbed capital allowances c/f", LookIn:=xlValues, lookat:=xlPart)
secondCalculation = Worksheets("Stat A").Cells(currentRowReference.Row - 1, "E")
ActiveCell.FormulaR1C1 = firstCalculation - secondCalculation
非常感谢任何帮助或想法!
编辑:我添加了大部分代码,以及应该从中读取的工作表的屏幕截图。在上面的代码中,firstCalculation成功计算,而secondCalculation抛出错误。
Screenshot of source sheet. Specifically, it's supposed to read A31
答案 0 :(得分:0)
因为你必须处理合并的单元格,所以你最好自己使用一个函数,如下所示:
Function MyRowFind(rng As Range, textToFind As String) As Long
Dim cell As Range
MyRowFind = -1
For Each cell In rng.SpecialCells(xlCellTypeConstants, xlTextValues)
If InStr(cell.value, textToFind) > 0 Then
MyRowFind = cell.Row
Exit Function
End If
Next cell
End Function
将在您的主要子中使用,如下所示:
Sub main()
Dim currentRowReferenceRow As Long
currentRowReferenceRow = MyRowFind(Worksheets("Stat A").Range("A1:A999"), "Unabsorbed capital allowances c/f")
If currentRowReferenceRow > 0 Then
' code
End If
End Sub