- Katılım
- 17 Mayıs 2012
- Mesajlar
- 102
- Excel Vers. ve Dili
- Office 2019, Türkçe
Herkese merhaba. Birden fazla excel dosyasını tek sayfada birleştirmek istiyorum. Aşağıdaki Makrom var ancak onu kullanabilmem için gelen exceldeki sekme adının 'Sayfa1' olması gerekiyor. Ancak gönderenler bazen değiştiriyor ve gözümden kaçabiliyor. Aşağıdaki makroyu sayfa adından bağımsız bırakabilir miyiz? dosyadaki ilk sekmeye hatta tüm sekmelere baksın. zaten makro tablomdaki başlıklara göre veri getiriyor. başlıklar tutmazsa veriyi getirmiyor.
Kod:
Sub KitaplariBirlestirBS()
Dim vaFiles As Variant
Dim wbkToCopy As Workbook
Dim ws As Worksheet
Dim wsa As Worksheet
ThisWorkbook.Activate
Set ws = Sayfa1
un = "Sayın " & Environ("UserName")
ms1 = MsgBox("Birden fazla dosyadan veri almak istiyor musunuz?", vbInformation + vbYesNo, un)
If ms1 = vbYes Then
ws.Range("A2:g" & Rows.Count).Clear
lc = ws.Cells(1, Columns.Count).End(xlToLeft).Column
vaFiles = Application.GetOpenFilename( _
FileFilter:="Microsoft Excel Workbooks(*.xls;*.xlsx;*.xlsb;*.xlsm),*.xls;*.xls;*.xlsx;*.xlsb;*.xlsm", _
Title:="Select Files to Proceed", MultiSelect:=True)
With Application
.DisplayAlerts = False
.ScreenUpdating = False
End With
If IsArray(vaFiles) Then
For i = LBound(vaFiles) To UBound(vaFiles)
If vaFiles(i) = ThisWorkbook.Path & Application.PathSeparator & ThisWorkbook.Name Then
ms4 = MsgBox("Cannot Open Itself", vbExclamation, un)
GoTo skipfile:
End If
Set wbkToCopy = Workbooks.Open(Filename:=vaFiles(i))
Set wsa = ActiveWorkbook.ActiveSheet
lra = wsa.Cells(Rows.Count, 1).End(xlUp).Row
lrc = wsa.Cells(1, Columns.Count).End(xlToLeft).Column
For c = 1 To lc
For ca = 1 To lrc
If wsa.Cells(1, ca) = ws.Cells(1, c) Then
cn = ca
Exit For
End If
Next ca
For r = 2 To lra
y = ws.Cells(Rows.Count, c).End(xlUp).Offset(1, 0).Row
If c <> lc Then
ws.Cells(y, c) = wsa.Cells(r, cn)
Else
ws.Cells(y, c) = Mid(ActiveWorkbook.Name, 1, InStr(1, _
ActiveWorkbook.Name, ".xls") - 1)
End If
y = y + 1
Next r
Next c
wbkToCopy.Close savechanges:=False
skipfile:
Next i
ws.Range("A1:g1").EntireColumn.AutoFit
ms5 = MsgBox("Verileriniz ana dosyaya aktarılmıştır", vbInformation, un)
Else
ms3 = MsgBox("Dosya seçmediniz!", vbExclamation, un)
End If
Else
ms2 = MsgBox("İşlemi İptal Ettiniz", vbInformation, un)
End If
With Application
.DisplayAlerts = True
.ScreenUpdating = True
End With
End Sub