2013-10-28 4 views
0

Я использую этот код для копирования всех данных с листа в закрытой книге в рабочую книгу назначения. Однако этот код проходит через каждую ячейку, а так как исходная книга содержит 40 000 строк, она занимает слишком много времени. Какие изменения могут быть внесены в этот код, чтобы скопировать все данные из исходного листа на конкретный лист в книге назначения без зацикливания через ячейки или, если есть альтернативное решение, что вы можете provide.Thanks за помощьСкопируйте большие данные из закрытой рабочей книги в конкретный рабочий лист в рабочей книге назначения

Sub GetDataDemo() 

Dim FilePath$, Row&, Column&, Address$ 

Const FileName$ = "Book1.xls" 
Const SheetName$ = "Sheet1" 
Const NumRows& = 40000 
Const NumColumns& = 10 
FilePath = ActiveWorkbook.Path & "\" 
'*************************************** 
    DoEvents 
Application.ScreenUpdating = False 
If Dir(FilePath & FileName) = Empty Then 
    MsgBox "The file " & FileName & " was not found", , "File Doesn't Exist" 
    Exit Sub 
End If 
For Row = 1 To NumRows 
    For Column = 1 To NumColumns 
     Address = Cells(Row, Column).Address 
     dest. Cells(Row, Column) = GetData(FilePath, FileName, SheetName, Address) 
     Columns.AutoFit 
    Next Column 
Next Row 
ActiveWindow.DisplayZeros = False 
End Sub 


Private Function GetData(Path, File, Sheet, Address) 
    Dim Data$ 
    Data = "'" & Path & "[" & File & "]" & Sheet & "'!" & _ 
    Range(Address).Range("A1").Address(, , xlR1C1) 
    GetData = ExecuteExcel4Macro(Data) 
End Function 
+0

Может быть, [это] (http://stackoverflow.com/questions/16981081/executeexcel4macro-to-get-range-charts-from-closed-workbooks) пост это то, что вам нужно? Однако у меня нет возможности сравнить время выполнения. Это сообщение выводит данные из закрытого листа в «Диапазон» без использования «ExecuteExcel4Macro». – L42

+2

Вы пытались открыть закрытую книгу? Было бы гораздо быстрее открыть закрытую книгу и скопировать весь диапазон без зацикливания –

+0

@ l42 .. Благодаря тому, что формула диапазона работает нормально. – vik

ответ

0

у меня есть founs купол хороший/аналогичный гуманного для вас по ссылке:

http://social.msdn.microsoft.com/Forums/office/en-US/aa6edf0f-2007-4f25-885c-f03d3df4d853/pulling-values-from-closed-workbook-into-current-workbook-but-on-a-different-sheet 

в вашем случае замены:

For Row = 1 To NumRows 
For Column = 1 To NumColumns 
Address = Cells(Row, Column).Address 
dest. Cells(Row, Column) = GetData(FilePath, FileName, SheetName, Address) 
Columns.AutoFit 
Next Column 
Next Row 

С:

For Row = 1 To NumRows 
For Column = 1 To NumColumns 
Address = Cells(Row, Column).Address 
Cells(Row, Column + X) = GetDataEleven(FilePath, FileName, SheetName, Address) 
Next Column 
Next Row 
Columns.AutoFit 
Смежные вопросы