从一个工作簿到另一个工作簿的COPY工作表

时间:2015-02-22 22:46:23

标签: excel vba excel-vba

我正在运行一个宏,打开第二个加载csv文件的工作簿。我想将包含新打开的工作簿的csv文件(即“Sheet1”)的工作表复制到起始工作簿中。在执行复制工作表的行时,我不断收到超出范围的下标。

Public Sub LoadCSV()
Dim FileName As String
Dim Path As String
Dim CurrentWorkbook As Workbook ' macro workbook
Dim CSVWorkBook As Workbook     ' csv workbook

Set CurrentWorkbook = ThisWorkbook

'File Dialog box to import CSV file
FileName = Application.GetOpenFilename(FileFilter:="CSV File (*.CSV,*.csv")
'Workbooks.Open FileName
Set CSVWorkBook = Workbooks.Open(FileName)

CSVWorkBook.Activate
CSVWorkBook.Worksheets("Sheet1").Copy _
After:=CurrentWorkbook.Worksheets(Sheets.Count)


    'Extracts the Path from the CSV file Path to be used later in function
Path = Left(FileName, InStrRev(FileName, "\"))
End Sub

2 个答案:

答案 0 :(得分:1)

我能想到的两件事:

Sheets.Count是指当前的Active工作簿。这明确地定为CSVWorkBook

CSVWorkBook.Activate
CSVWorkBook.Worksheets("Sheet1").Copy _
After:=CurrentWorkbook.Worksheets(Sheets.Count)

因此,将以上3行更改为以下内容:

With CurrentWorkbook
    CSVWorkbook.Worksheets("Sheet1").Copy _
        After:=.Worksheets(.Sheets.Count)
End With

如果仍然在Copy语句上引发了下标范围错误,那么这是因为该工作簿中没有名为“Sheet1”的工作表。通常,CSV文件只有一个“工作表”,该工作表的名称与文件名相同(没有扩展名)。

不要试图确定工作表的名称,因为我们知道CSV文件中应该只有1个工作表,请执行以下操作:

With CurrentWorkbook
    CSVWorkbook.Worksheets(1).Copy _
        After:=.Worksheets(.Sheets.Count)
End With

答案 1 :(得分:0)

在您正在使用的复制行上" Sheets.Count"在那一刻,它指的是" CSVWorkbook"您刚刚在CurrentWorkbook中插入之前刚刚激活过的。似乎CSVWorkbook实际上有比CurrentWorkbook更多的工作表。如果是这种情况,那么您确实试图在此工作簿的最后一个工作表之后插入工作表,这将触发超出范围的"下标"错误类型。