复制不同工作簿之间的单元格内容

scheme:Workbook2.xlsx,Workbook1.xlsx和VBA编辑器已打开。 Workbook1.xlsx和Workbook2.xlsx都是VBA项目,每个项目都有一个名为Sheet1(Sheet1)的活动工作表对象。 单击Workbook2中的CommandButton5,我想要将Workbook1中的单元格A1到D10移动到Workbook2的A1到D10中。
当我在debugging模式下将鼠标移动到“Set Move = …”上时,它表示Move = Nothing。

Private Sub CommandButton5_Click() Dim Move As Range Set Move = Workbooks(Workbook1).Worksheets(1).Range(Cells(1,1), Cells(4,10)) Move.Select Selection.Copy Workbooks(Workbook2).Worksheets(1).Range(Cells(1,1), Cells(4,10)).Select ActiveSheet.Paste End Sub 

您需要在工作簿的名称周围使用引号。 此外,为了使用工作簿(select范围并复制和粘贴),您明确需要激活工作簿。

 Private Sub CommandButton5_Click() Dim Book As Workbook ' Get Workbook 1 and activate it Set Book = Workbooks("Workbook1") Book.Activate Dim Move As Range Set Move = Book.Worksheets(1).Range(Cells(1, 1), Cells(4, 10)) Move.Select Selection.Copy ' Get Workbook 2 and activate it Set Book = Workbooks("Workbook2") Book.Activate Set Move = Book.Worksheets(1).Range(Cells(1, 1), Cells(4, 10)) Book.Worksheets(1).Range(Cells(1, 1), Cells(4, 10)).Select ActiveSheet.Paste End Sub 

还要注意,为了使用多个工作簿,它们都必须在同一个Excel实例中打开(即在同一个Excel过程中运行)。 如果您在不同的Excel进程中打开了多个工作簿,则无法从同一个macros访问它们。


这是一个不需要使用剪贴板的变体:

 Sub CommandButton5_Click() Dim Source As Range Workbooks("Workbook1").Activate Set Source = Workbooks("Workbook1").Worksheets(1).Range(Cells(1, 1), Cells(4, 10)) Dim Target As Range Workbooks("Workbook2").Activate Set Target = Workbooks("Workbook2").Worksheets(1).Range(Cells(1, 1), Cells(4, 10)) Target.Value = Source.Value End Sub