如何修改VBA代码实现自动打开目标工作簿后执行条件判断?
修改后的代码
Sub Button3_Click() Dim sourceWB As Workbook Dim sourceWS As Worksheet Dim destWB As Workbook Dim destWS As Worksheet Dim sourceRange As Range Dim destRange As Range Dim lastRow As Long Dim i As Long ' 替换为你的文件实际完整路径 Dim sourceFilePath As String Dim destFilePath As String sourceFilePath = "C:\你的文件夹路径\Copy of Copy of Copy of Pace Duplicate Check 2023 (002).xlsm" destFilePath = "C:\你的文件夹路径\MacroTestWorkbook.xlsm" ' 检查源工作簿是否已打开,未打开则打开 On Error Resume Next Set sourceWB = Workbooks("Copy of Copy of Copy of Pace Duplicate Check 2023 (002).xlsm") On Error GoTo 0 If sourceWB Is Nothing Then Set sourceWB = Workbooks.Open(sourceFilePath) End If ' 检查目标工作簿是否已打开,未打开则打开 On Error Resume Next Set destWB = Workbooks("MacroTestWorkbook.xlsm") On Error GoTo 0 If destWB Is Nothing Then Set destWB = Workbooks.Open(destFilePath) End If Set sourceWS = sourceWB.Worksheets("PAID") Set destWS = destWB.Worksheets("Sheet1") lastRow = sourceWS.Cells(sourceWS.Rows.Count, "J").End(xlUp).Row ' 指定工作表行数,避免引用混乱 For i = lastRow To 1 Step -1 ' 反向循环避免删除行后跳过数据 If sourceWS.Cells(i, "J").Value = "REMOVE" Then Set sourceRange = sourceWS.Rows(i) Set destRange = destWS.Cells(destWS.Rows.Count, "A").End(xlUp).Offset(1, 0) sourceRange.Copy destRange sourceRange.Delete End If Next i destWB.Save destWB.Close ' 若需要关闭源工作簿,取消下面两行注释 ' sourceWB.Save ' sourceWB.Close End Sub
关键修改说明
- 指定完整文件路径:
Workbooks.Open仅传文件名时,Excel只会在默认路径查找,大概率找不到文件,这是你之前用.Open后宏停止的核心原因,必须填写工作簿的绝对路径。 - 检查工作簿状态:先尝试获取已打开的工作簿,找不到再执行打开操作,避免重复打开导致报错。
- 修正行数引用:原代码
Rows.Count未指定工作表,会默认引用当前活动工作表的行数,改为sourceWS.Rows.Count更严谨。 - 临时错误捕获:用
On Error Resume Next跳过获取工作簿时的错误,之后恢复正常错误处理,避免其他问题被掩盖。
内容的提问来源于stack exchange,提问作者Adam Dominguez
相关产品推荐
相关产品推荐

