将范围从一个工作簿复制到另一个工作簿

时间:2019-03-07 14:24:41

标签: excel vba

我有一本三页的工作簿。 RC,RI,RCB。我需要编写VBA代码,它将复制该工作簿中的范围并将其粘贴到新创建的工作簿中。

在此代码中,除工作表RCB之外,所有内容均正常运行。调试在第12行打开

Sub Budget()
With Workbooks.Add
ActiveSheet.Name = "RC"
ThisWorkbook.Worksheets("RC").Range("A:D").Copy .Worksheets("RC").Range("A1")
ThisWorkbook.Worksheets("RC").Range("E:G").Copy .Worksheets("RC").Range("E1")
Sheets.Add
ActiveSheet.Name = "RI"
ThisWorkbook.Worksheets("RI").Range("A:E").Copy .Worksheets("RI").Range("A1")
ThisWorkbook.Worksheets("RI").Range("G:G").Copy .Worksheets("RI").Range("G1")
Sheets.Add
ActiveSheet.Name = "RCB"
ThisWorkbook.Worksheets("RCB").Range("A:C").Copy .Worksheets("RCB").Range("A1")
ThisWorkbook.Worksheets("RCB").Range("E:E").Copy .Worksheets("RCB").Range("G1")
.SaveAs "C:\Users\lomid\Desktop\4finansi3"
.Close
End With
End Sub

我认为它必须与活动表和工作簿有关。 这是一个错误,提示我:“运行时错误9:下标超出范围”

1 个答案:

答案 0 :(得分:0)

您可以取消所有复制/粘贴。当您使用SaveAs保存当前工作簿时,原始工作簿将关闭而不保存,而新工作簿将打开。从我可以从您的问题中看出来,您只想保留某些列。我想删除不需要的列,并对新的工作簿名称执行SaveAs。下面的代码更加简洁。使用Application.DisplayAlerts = False,以免收到The following features cannot be saved in macro-free workbooks:提示。

Application.DisplayAlerts = False
    With ThisWorkbook
        .Sheets("RC").Range("H:Z").EntireColumn.Delete
        .Sheets("RI").Range("H:Z, F:F").EntireColumn.Delete
        .Sheets("RCB").Range("F:Z, D:D").EntireColumn.Delete

        .SaveAs "C:\Users\lomid\Desktop\4finansi3.xlsx"
    End With
Application.DisplayAlerts = True