我正在运行一个宏,打开第二个加载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
答案 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更多的工作表。如果是这种情况,那么您确实试图在此工作簿的最后一个工作表之后插入工作表,这将触发超出范围的"下标"错误类型。