求助:使用VBA代码移动3个工作表至另一工作簿遇问题
解决VBA移动工作表到目标工作簿的问题
我看了你写的VBA代码,问题出在引用目标工作表的方式上,咱们一步步来修正:
原代码的核心问题
你定义了ObjWs = Worksheets("Sheet3"),但这里没指定工作簿,默认会指向当前工作簿的Sheet3;更关键的是后面用ObjWb.ObjWs是错误语法——ObjWs已经是一个独立的对象变量,不需要再用ObjWb前缀来调用它。
修正后的代码(移到指定工作表之前)
如果确实要把三个工作表移到CompareResults.xlsx里的Sheet3之前,代码应该改成这样:
Sub MovetoNewSheet() Dim ObjWb As Workbook Dim targetWs As Worksheet ' 先检查目标工作簿是否已打开,避免报错 On Error Resume Next Set ObjWb = Workbooks("CompareResults.xlsx") On Error GoTo 0 If ObjWb Is Nothing Then MsgBox "CompareResults.xlsx 未打开,请先打开该工作簿!" Exit Sub End If ' 明确指定目标工作簿中的Sheet3 Set targetWs = ObjWb.Worksheets("Sheet3") ' 依次移动三个工作表到目标位置 ThisWorkbook.Sheets("Result").Move Before:=targetWs ThisWorkbook.Sheets("DeletedBlocks").Move Before:=targetWs ThisWorkbook.Sheets("COUNT").Move Before:=targetWs End Sub
另一种常用场景:移到目标工作簿的最后
如果不需要指定移到Sheet3之前,而是直接放到CompareResults.xlsx的最后一个工作表后面,代码可以更简洁:
Sub MovetoNewSheet() Dim ObjWb As Workbook ' 检查目标工作簿是否打开 On Error Resume Next Set ObjWb = Workbooks("CompareResults.xlsx") On Error GoTo 0 If ObjWb Is Nothing Then MsgBox "CompareResults.xlsx 未打开,请先打开该工作簿!" Exit Sub End If ' 移动工作表到目标工作簿末尾 ThisWorkbook.Sheets("Result").Move After:=ObjWb.Sheets(ObjWb.Sheets.Count) ThisWorkbook.Sheets("DeletedBlocks").Move After:=ObjWb.Sheets(ObjWb.Sheets.Count) ThisWorkbook.Sheets("COUNT").Move After:=ObjWb.Sheets(ObjWb.Sheets.Count) End Sub
关键修正点说明
- 增加容错检查:加入了目标工作簿是否打开的判断,避免因文件未打开导致代码崩溃
- 明确对象归属:指定
targetWs属于ObjWb,彻底区分当前工作簿和目标工作簿的工作表 - 修正语法错误:移除了错误的
ObjWb.ObjWs写法,直接使用定义好的对象变量调用
内容的提问来源于stack exchange,提问作者Yash Pisat
相关产品推荐
相关产品推荐

