【发布时间】:2021-04-03 12:32:05
【问题描述】:
当导入选项卡中没有文件路径时,此代码会产生错误。因此,我包含On Error Resume Next 以便运行下一个循环。但是,在On Error Resume Next 之后,代码继续运行复制操作,这弄乱了我要复制到的选项卡。
我确定解决方案是 On Error 代码应该进入下一个循环而不是继续操作。有人对如何更改错误处理来做到这一点有任何意见吗?
Sub ImportBS()
Dim filePath As String
Dim SourceWb As Workbook
Dim TargetWb As Workbook
Dim Cell As Range
Dim i As Integer
Dim k As Integer
Dim Lastrow As Long
'SourceWb - Workbook were data is copied from
'TargetWb - Workbook were data is copied to and links are stored
Application.ScreenUpdating = False
Set TargetWb = Application.Workbooks("APC Refi Tracker.xlsb")
Lastrow = TargetWb.Sheets("Import").Range("F100").End(xlUp).Row - 6
For k = 1 To Lastrow
filePath = TargetWb.Sheets("Import").Range("F" & 6 + k).Value
Set SourceWb = Workbooks.Open(filePath)
On Error Resume Next
Range("A1").CurrentRegion.Copy
TargetWb.Sheets("Balance Sheet Drop").Range("D" & 2 + (k - 1) * 149).PasteSpecial Paste:=xlPasteValues
Range("A1").Copy
Application.CutCopyMode = False
SourceWb.Close
Next
Application.ScreenUpdating = True
Worksheets("Import").Activate
MsgBox "All done!"
End Sub
【问题讨论】:
-
您假设
APC Refi Tracker.xlsb已经打开。您的代码是位于其中还是位于第三个工作簿中?您正在使用F100。第 100 行以下有数据吗?如果这个Range("A1").CurrentRegion.Copy指的是刚刚打开的Source Workbook 中的ActiveSheet,它的名称或索引是什么? -
在 VBA 中,如果您正在寻找一种允许您从 for 循环中的“下一个”语句“继续”的结构,您通常会考虑将代码移动到单独的函数中并使用保护该函数中的语句反转了强制尝试继续的测试的逻辑。
-
@VBasic2008 APC Refi Tracker.xlsb 是代码的宿主,在运行时是打开的。导入选项卡位于 Refi Tracker 中并托管链接,但通常情况下我没有此特定交易的链接,因此目的是跳过该字段。由于这会在代码中产生错误,因此我在 Error Resume Next 中添加了代码,这可能不是一种很好的错误处理方式。
-
这使得源工作表名称或索引(在我的解决方案中称为
srcID)成为唯一未澄清的“变量”。这很重要,因为如果您保存一个或多个源工作簿而另一个不是预期的活动工作表,您的代码可能(将)失败。我指的是Range("A1").CurrentRegion.Copy这行应该类似于SourceWb.Worksheets("Sheet1").Range("A1").CurrentRegion.Copy。
标签: excel vba error-handling