VBA:忽略variables未设置错误

我需要根据另一范围的数据填充一系列数据。 例如,如果第一个范围包含应计pipe理费用,我将填充“closures应计(pipe理费用)”到另一个范围。 我的代码下面的作品,如果它设法find所有的领域。 但是,如果其中一个字段丢失,则会返回未设置的错误variables并停止运行。

Set FindAdmin = Worksheets("IVES").Range("A1:Z350").Find("** ACCRUED ADMINISTRATION EXPENSE", LookIn:=xlValues, lookat:=xlWhole) Range(FindAdmin.Address).Offset(, 4) = "Budget" Range(FindAdmin.Address).Offset(, 5) = "Closing Accruals (Admin Expense)" On Error Resume Next Set FindAudit = Worksheets("IVES").Range("A1:Z350").Find("** ACC AUDIT", LookIn:=xlValues, lookat:=xlWhole) Range(FindAudit.Address).Offset(, 4) = "Budget" Range(FindAudit.Address).Offset(, 5) = "Closing Accruals(Audit Expense)" On Error Resume Next Set FindLegal = Worksheets("IVES").Range("A1:Z350").Find("** PAYABLE FOR FUND LEGAL - EXP", LookIn:=xlValues, lookat:=xlWhole) Range(FindLegal.Address).Offset(, 4) = "Budget" Range(FindLegal.Address).Offset(, 5) = "Closing Accruals (Legal Fees)" On Error Resume Next Set FindTax = Worksheets("IVES").Range("A1:Z350").Find("** PAYABLE FOR FUND TAX-EXPENSE", LookIn:=xlValues, lookat:=xlWhole) Range(FindTax.Address).Offset(, 4) = "Budget" Range(FindTax.Address).Offset(, 5) = "Closing Accruals (Tax Exp)" On Error Resume Next Set FindProf = Worksheets("IVES").Range("A1:Z350").Find("** ACCRUED OTHER PROF FEE", LookIn:=xlValues, lookat:=xlWhole) Range(FindProf.Address).Offset(, 4) = "Budget" Range(FindProf.Address).Offset(, 5) = "Closing Accruals (Other Prof Fee)" On Error Resume Next Set FindCustody = Worksheets("IVES").Range("A1:Z350").Find("** CUSTODY", LookIn:=xlValues, lookat:=xlWhole) Range(FindCustody.Address).Offset(, 4) = "Budget" Range(FindCustody.Address).Offset(, 5) = "Closing Accruals (Custody Exp)" On Error Resume Next Set FindMisc = Worksheets("IVES").Range("A1:Z350").Find("** ACCRUED MISCELLANEOUS EXPENSE", LookIn:=xlValues, lookat:=xlWhole) Range(FindMisc.Address).Offset(, 4) = "Budget" Range(FindMisc.Address).Offset(, 5) = "Closing Accruals (Misc Exp)" On Error Resume Next Set FindIRC = Worksheets("IVES").Range("A1:Z350").Find("** IRC FEE ACCRUAL", LookIn:=xlValues, lookat:=xlWhole) Range(FindIRC.Address).Offset(, 4) = "Budget" Range(FindIRC.Address).Offset(, 5) = "Closing Accruals (IRC Fee)" On Error Resume Next 

我将需要代码来忽略错误,并继续运行,以便它可以继续填充发现的。 我试图使用错误恢复下一步,但它似乎并没有工作。 任何想法如何让系统忽略这个错误? 提前致谢

如果要search的范围对于每个search文本确实是相同的,并且偏移确实都是相同的(4和5),那么创build一个函数并调用函数,传递string作为参数更好。 把这个函数ONCE放在你的模块中:

 Function NewRange(txt As String, str1 As String, str2 As String) Dim r As Range Set r = Worksheets("IVES").Range("A1:Z350").Find(txt, LookIn:=xlValues, LookAt:=xlWhole) If Not r Is Nothing Then r.Offset(, 4) = str1 r.Offset(, 5) = str2 End If End Function 

然后调用你的子程序中的每一个代码,如下所示:

 Call NewRange("** ACCRUED ADMINISTRATION EXPENSE", "Budget", "Closing Accruals(Audit Expense)") Call NewRange("** ACC AUDIT", "Budget", "Closing Accruals(Audit Expense)") Call NewRange("** PAYABLE FOR FUND LEGAL - EXP", "Budget", "Closing Accruals (Legal Fees)") 

等等…

如果你的function有些不同,你可以把error handling放在你的函数中,例如,如果你使用的是数字,你可以检查零除以及在你的函数/

我假设你已经声明了(Dim'd)FindAdmin作为Range你可以把一个On Error Resume Next放在你的.Find的开头,并且关掉错误检查, On error goto 0结束时On error goto 0那些。

但是,为了避免遗漏其他错误,像下面这样的构造将会更加有用,并且如果找不到search短语,还可以为您提供其他选项的机会:

 Set FindAdmin = Worksheets("IVES").Range("A1:Z350").Find("** ACCRUED ADMINISTRATION EXPENSE", LookIn:=xlValues, lookat:=xlWhole) If Not FindAdmin Is Nothing Then With FindAdmin .Offset(, 4) = "Budget" .Offset(, 5) = "Closing Accruals (Admin Expense)" End With End If