【发布时间】: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 toSkip` 标签。那么,“挂断电话”是什么意思?它没有返回错误吗?如果是,是什么错误? -
为了使代码更简洁整洁,请声明一个变量
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