2015-09-09 3 views
0

Я пытаюсь собрать данные из нескольких листов из выбранной книги, но я получаю ошибку «9» за время выполнения вне диапазона.Сбор данных из нескольких рабочих листов из выбранной книги

Я использую следующий код:

Sub MultipleSheets() 

Dim filepath As Variant 
Dim outputFilePath As String 
Dim outputSheetName As String 

'To which file and sheet within the file should the output go? 
outputFilePath = "C:\Users\z003k50s\Desktop\Test\Output.xlsx" 
outputSheetName = "Sheet1" 

For Each filepath In Application.GetOpenFilename(FileFilter:="Excel Files (*.xl*), *.xl*", MultiSelect:=True) 
    Dim conn As New ADODB.Connection 
    Dim schema As ADODB.Recordset 
    Dim sql As String 
    Dim sheetname As Variant 

    With conn 
     .Provider = "Microsoft.ACE.OLEDB.12.0" 
     .ConnectionString = "Data Source=""" & filepath & """;" & _ 
      "Extended Properties=""Excel 12.0;HDR=Yes""" 
     .Open 
    End With 
    Set schema = conn.OpenSchema(adSchemaTables) 
    For Each sheetname In schema.GetRows(, , "TABLE_NAME") 'returns a 2D array of one column 
sql = "SELECT * FROM [" & sheetname & "]" 

     'If you want a specific range, you can change that in the last line: 
     'Dim topLeft As String, bottomRight As String 
     'topLeft = "D4" 
     'bottomRight = "F100" 
     'sql = _ 
     ' "INSERT INTO [" & outputSheetName & "$] IN """ & outputFilePath & """ ""Excel 12.0;"" " & _ 
     ' "SELECT * " & _ 
     ' "FROM [" & sheetname & topLeft & ":" & bottomRight & "]" 

     conn.Execute sql 
    Next 
Next 

Dim wbk As Workbook 
Set wbk = Workbooks.Open(outputFilePath) 
wbk.Worksheets(outputSheetName).AutoFit 

End Sub 

Credit Zev шпиц для образца кода.

Когда я отладки, он выделяет следующую строку:

wbk.Worksheets(outputSheetName).AutoFit 

ответ

0

AutoFit является методом Range объекта, а не WorkSheet объекта.

Так что-то вроде:

wbk.Worksheets(outputSheetName).UsedRange.AutoFit 

должен работать

+0

Хм, все еще получаю ту же ошибку. –

+0

Тогда ваше имя рабочего листа неверно. – Rory

+0

По какой-то причине мой Excel назвал рабочий лист «Tabelle1» вместо «Sheet1» в выходном файле, но теперь я получаю ошибку времени выполнения «1004». Не удалось использовать метод Autofit класса Range. –

Смежные вопросы