【问题标题】:Excel: Skip loop if cell returns #N/A ErrorExcel:如果单元格返回 #N/A 错误,则跳过循环
【发布时间】:2021-08-04 15:59:35
【问题描述】:

我写了下面的脚本,但被这部分代码挂了:

If TargetWb.Sheets("Expenses").Range("F61").Offset(0, i - 1).Value = CVErr(xlErrNA) Then GoTo Skip Else GoTo Continue

我正在尝试做的事情:如果单元格的值返回 #N/A 作为函数的一部分,我想移至下一个循环。关于如何实现这一点的任何建议?

提前感谢您的解决方案。由于我还是个初学者,因此我也总是愿意接受有关如何更好地构建此代码的建议。


    Dim filePath As String
    Dim SourceWb As Workbook
    Dim TargetWb As Workbook
    Dim S_Deal As Range
    Dim i As Integer
    
    'SourceWb - Workbook were data is copied from
    'TargetWb - Workbook were data is copied to and links are stored
    
Application.ScreenUpdating = False
    
    Set TargetWb = ThisWorkbook
    filePath = ThisWorkbook.Sheets("Expenses").Range("S4").Value
    Set SourceWb = Workbooks.Open(filePath)

    For i = 1 To 6
   
 If TargetWb.Sheets("Expenses").Range("F61").Offset(0, i - 1).Value = CVErr(xlErrNA) Then GoTo Skip Else GoTo Continue
    
Continue:

    Set S_Deal = TargetWb.Sheets("Expenses").Cells(11, 5 + i)
    SourceWb.ActiveSheet.Range("OPEX_Control").Value = S_Deal.Value
    
    
    TargetWb.Sheets("Expenses").Range("F12:F15").Offset(0, i - 1).Value = SourceWb.ActiveSheet.Range("P9:P12").Value
    TargetWb.Sheets("Expenses").Range("F18:F21").Offset(0, i - 1).Value = SourceWb.ActiveSheet.Range("o14:o17").Value
    TargetWb.Sheets("Expenses").Range("F23:F26").Offset(0, i - 1).Value = SourceWb.ActiveSheet.Range("o19:o22").Value
    TargetWb.Sheets("Expenses").Range("F29").Offset(0, i - 1).Value = SourceWb.ActiveSheet.Range("o25").Value
    
Skip:
    
    Next i


Application.ScreenUpdating = True

End Sub

【问题讨论】:

  • GoTo Skip 应该足够了。 ` Else GoTo Continue` 应该被删除并且标签` Continue:, too. Anyhow, the code goes to the next row if not going to Skip` 标签。那么,“挂断电话”是什么意思?它没有返回错误吗?如果是,是什么错误?
  • 为了使代码更简洁整​​洁,请声明一个变量Dim shEx As Worksheet,并将其设置为Set shEx = TargetWb.Sheets("Expenses")。然后,将所有TargetWb.Sheets("Expenses") 替换为shEx
  • @FaneDuru 和SourceWb.ActiveSheet一样
  • 而不是filePath = ThisWorkbook.Sheets("Expenses").Range("S4").Value。您可以在代码模块中将文件路径声明为常量,例如Const filePath as String = "C:\Program Files\Common Files\System\"。这样,您就不必为用户不需要看到的东西专用工作表空间。此外,它还可以防止用户意外更改或删除它。
  • @Toddleson:如果他知道工作表名称,是的。但是,如果情况涉及不同的工作表并处理活动的工作表,则无法完成。无论如何,通过代码打开工作簿它是活动的......

标签: excel vba loops error-handling


【解决方案1】:

如果要检查excel函数在vba中是否返回#N/A,可以使用以下代码:

If Application.WorksheetFunction.IsNA(Cells(intRow, x)) Then

由于您想要的是执行代码,除非 wb.function 不是#N/A,因此通过重新安排您的 If VBA 代码应该能够达到您想要的结果。

If Application.WorksheetFunction.IsNA(TargetWb.Sheets("Expenses").Range("F61")) = false then
{your code}
end if

next i

所以当 wb 函数返回 #N/A 时,它不会执行中间的代码并进入下一个循环

【讨论】:

  • 如果是相似的,我不明白他为什么要坚持达到他的结果,那么也许他的问题是另一个问题。也感谢您的解释。
猜你喜欢
  • 1970-01-01
  • 2015-08-20
  • 1970-01-01
  • 2021-06-29
  • 1970-01-01
  • 1970-01-01
  • 2020-10-13
  • 1970-01-01
  • 2017-04-26
相关资源
最近更新 更多