Я использую этот код для копирования всех данных с листа в закрытой книге в рабочую книгу назначения. Однако этот код проходит через каждую ячейку, а так как исходная книга содержит 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
Может быть, [это] (http://stackoverflow.com/questions/16981081/executeexcel4macro-to-get-range-charts-from-closed-workbooks) пост это то, что вам нужно? Однако у меня нет возможности сравнить время выполнения. Это сообщение выводит данные из закрытого листа в «Диапазон» без использования «ExecuteExcel4Macro». – L42
Вы пытались открыть закрытую книгу? Было бы гораздо быстрее открыть закрытую книгу и скопировать весь диапазон без зацикливания –
@ l42 .. Благодаря тому, что формула диапазона работает нормально. – vik