Excel VBA跨工作簿复制数据报Range类Select方法失败如何解决
报错原因
你触发Select Method of Range Class Failed报错的核心原因是:VBA中只有当Range所属的工作表处于激活状态时,才能对该Range执行Select方法。你的代码中执行Workbooks.Add新建工作簿后,新工作簿会被系统自动设为当前激活的工作簿,此时你直接选择原工作簿下current_worksheet的单元格区域,该工作表未被激活,因此Select方法调用失败。
最优解决方案(无需使用Select)
实际VBA开发中完全不推荐使用Select/Activate系列方法,不仅执行效率低,还极易出现上下文切换导致的报错。你要实现带格式的跨工作簿复制,直接调用Range的Copy方法指定目标位置即可,代码示例如下:
Public Sub Worksheet_Export() Dim current_workbook As Workbook Dim New_workbook As Workbook Dim current_worksheet As Worksheet Dim New_worksheet As Worksheet Set current_workbook = ThisWorkbook Set New_workbook = Workbooks.Add Set current_worksheet = current_workbook.Sheets(2) Set New_worksheet = New_workbook.Sheets(1) ' 直接复制A:C列到新工作表A1起始位置,自带格式,无需Select current_worksheet.Range("A:C").Copy Destination:=New_worksheet.Range("A1") ' 如果需要执行更复杂的选择性粘贴(比如仅粘贴值+格式),可以用如下写法,同样无需Select ' current_worksheet.Range("A:C").Copy ' New_worksheet.Range("A1").PasteSpecial Paste:=xlPasteValuesAndNumberFormats ' Application.CutCopyMode = False ' 清空剪贴板 End Sub
必须使用Select的修正写法
如果你确实有业务场景需要保留Select操作,只需要在选择目标Range前先激活它所属的工作表即可:
Public Sub Worksheet_Export() Dim current_workbook As Workbook Dim New_workbook As Workbook Dim current_worksheet As Worksheet Dim New_worksheet As Worksheet Set current_workbook = ThisWorkbook Set New_workbook = Workbooks.Add Set current_worksheet = current_workbook.Sheets(2) Set New_worksheet = New_workbook.Sheets(1) ' 先激活对应工作表再选择区域 current_worksheet.Activate current_worksheet.Range("A:C").Select ' 后续你要执行的粘贴操作同理,粘贴前先激活目标工作表对应位置 End Sub
内容的提问来源于stack exchange,提问作者falcon flyer75
相关产品推荐
相关产品推荐

