2016-05-31 10 views
0

Я пытаюсь объединить несколько файлов excel в один файл. Я могу сделать это правильно, но место, где я хочу разместить данные, сталкивается с небольшой проблемой.Как импортировать данные Excel в новую книгу?

Я хочу, чтобы мои данные начинались (вставляются) в ячейке A2 под заголовком, но поскольку мой лист отформатирован как таблица с именованным диапазоном, мои данные вставляются чуть ниже последней строки этой пустой таблицы. Это код, который я использую для вставки данных.

Sub CombineFiles() 

Dim path As String, ThisWB As String, lngFilecounter As Long 
Dim wbDest As Workbook, shtDest As Worksheet, ws As Worksheet 
Dim Filename As String, Wkb As Workbook 
Dim CopyRng As Range, Dest As Range 
Dim RowofCopySheet As Integer 

ThisWB = ActiveWorkbook.Name 

path = "C:\MyFolder" 

RowofCopySheet = 2 

Application.EnableEvents = False 
Application.ScreenUpdating = False 

Set shtDest = ActiveWorkbook.Sheets("Import") 
Range("A2").Select 
Filename = Dir(path & "\*.xl??", vbNormal) 
If Len(Filename) = 0 Then Exit Sub 
Do Until Filename = vbNullString 
    If Not Filename = ThisWB Then 
     Set Wkb = Workbooks.Open(Filename:=path & "\" & Filename) 
     Set CopyRng = Wkb.Sheets(1).Range(Cells(RowofCopySheet, 1), Cells(Cells(Rows.Count, 1).End(xlUp).Row, Cells(1, Columns.Count).End(xlToLeft).Column)) 
     Set Dest = shtDest.Range("A" & shtDest.Cells(Rows.Count, 1).End(xlUp).Row + 1) 
     CopyRng.Copy 
     Dest.PasteSpecial xlPasteFormats 
     Dest.PasteSpecial xlPasteValuesAndNumberFormats 
     Application.CutCopyMode = False 'Clear Clipboard 
     Wkb.Close False 
    End If 

    Filename = Dir() 
Loop 
Sheets("Import").Select 
Range("A1").Select 
End Sub 

Есть ли какие-либо изменения, я могу сделать, чтобы код или содержимое ячеек в таблице, чтобы это работало правильно? Спасибо за помощь!

ответ

0

Пожалуйста, попробуйте это после изменения диапазона в соответствии с вашими требованиями. Он будет вставляться из A2. Использование буфера обмена требует времени и ресурсов, поэтому наилучшим способом было бы избежать копирования и вставки и просто установить значения, равные тому, что вы хотите. Несмотря на то, что вы указали, что передача данных требуется между отдельными рабочими книгами, но упомянутый код касается только основной проблемы, поэтому этот фрагмент кода передает основную концепцию для передачи в ситуации, когда задействована именованная таблица.

Sub Normalize() 
    Dim CopyFrom As Range 

    Set CopyFrom = Sheets("Sheet2").Range("A2", [H30]) 
    Sheets("Sheet1").Range("A1").Resize(CopyFrom.Rows.Count).Value = CopyFrom.Value 

End Sub 
+0

Вы правильно относитесь к буферу, занимая время и ресурсы. Этот код действительно хочет скопировать данные из других листов в книгу правильно? Мой код вытягивается из нескольких файлов. Я отредактирую свою публикацию с полным кодом. – Dennis

+0

В то же время, пожалуйста, посмотрите, как это работает в одной книге. Я опаздываю здесь и завтра, я буду в состоянии заглянуть в него. – skkakkar

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