VBA Sujunkite kelis „Excel“ failus į vieną darbaknygę

Ši pamoka parodys, kaip sujungti kelis „Excel“ failus į vieną VBA darbo knygą

Norint sukurti vieną darbaknygę iš daugybės darbaknygių naudojant VBA, reikia atlikti kelis veiksmus.

  • Turite pasirinkti darbaknyges, iš kurių norite gauti šaltinio duomenis - šaltinio failus.
  • Turite pasirinkti arba sukurti darbaknygę, į kurią norite įdėti duomenis - paskirties failą.
  • Turite pasirinkti lapus iš reikalingų šaltinio failų.
  • Turite pasakyti kodą, kur dėti duomenis į paskirties failą.

Sujungti visus lapus iš visų atvirų darbaknygių į naują darbaknygę kaip atskirus lapus

Žemiau esančiame kode failai, iš kurių reikia nukopijuoti informaciją, turi būti atidaryti, nes „Excel“ peržiūrės atidarytus failus ir nukopijuos informaciją į naują darbaknygę. Kodas įrašomas į asmeninę makrokomandos darbaknygę.

Šie failai yra TIK „Excel“ failai, kurie turėtų būti atidaryti.

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647 Sub CombineMultipleFiles ()Dėl klaidos GoTo eh“deklaruoti kintamuosius, kad būtų laikomi reikalingi objektaiDim wbDestination As WorkbookDim wbSource As WorkbookDim wsSource As WorkheetDim wb Kaip darbo knygaDim sh kaip darbalapisSumažinti strSheetName kaip eilutęDim strDestName As String"išjunkite ekrano atnaujinimą, kad viskas paspartėtųApplication.ScreenUpdating = Netiesa“pirmiausia sukurkite naują paskirties darbaknygęNustatykite „wbDestination = Workbooks.Add““gaukite naujos darbaknygės pavadinimą, kad pašalintumėte ją iš toliau pateiktos eilutėsstrDestName = wbDestination.NameDabar peržiūrėkite kiekvieną atidarytą darbaknygę, kad gautumėte duomenis, bet neįtraukite naujos knygos ar asmeninės makrokomandosUž kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadaNustatykite wbSource = wbUž kiekvieną „Sh In wbSource.Worksheets“sh. Copy After: = Darbaknygės (strDestName). Lakštai (1)Kitas shPabaiga JeiKitas wbDabar uždarykite visus atidarytus failus, išskyrus naują failą ir asmeninę makrokomandos darbaknygę.Už kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadawb. Uždaryti NetiesaPabaiga JeiKitas wb“pašalinkite pirmą lapą iš paskirties darbaknygėsApplication.DisplayAlerts = NetiesaSkaičiuoklės („Sheet1“). IštrintiApplication.DisplayAlerts = Tiesa„išvalykite objektus, kad atlaisvintumėte atmintįNustatyti wbDestination = NiekoNustatyti wbSource = NiekoNustatyti wsSource = NiekoNustatykite wb = nieko“, kai baigsite, įjunkite ekrano atnaujinimąApplication.ScreenUpdating = NetiesaIšeiti iš Subeh:„MsgBox“ klaida. AprašymasPabaiga Sub

Spustelėkite dialogo langą Makro, kad paleistumėte procedūrą iš „Excel“ ekrano.

Dabar bus rodomas jūsų bendras failas.

Šis kodas perėjo kiekvieną failą ir nukopijavo lapą į naują failą. Jei kuris nors iš jūsų failų turi daugiau nei vieną lapą, jis nukopijuos ir tuos lapus, įskaitant lapus, kuriuose nieko nėra!

Sujungti visus visų atvirų darbaknygių lapus į vieną darbalapį naujoje darbaknygėje

Toliau pateikta procedūra sujungia informaciją iš visų visų atidarytų darbaknygių lapų į vieną darbo lapą naujoje sukurtoje darbaknygėje.

Informacija iš kiekvieno lapo įklijuojama į paskirties lapą paskutinėje užimtoje darbalapio eilutėje.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869 Sub CombineMultipleSheets ()Dėl klaidos GoTo eh“deklaruoti kintamuosius, kad būtų laikomi reikalingi objektaiDim wbDestination As WorkbookDim wbSource As WorkbookDim wsDestination As WorkheetDim wb Kaip darbo knygaDim sh kaip darbalapisSumažinti strSheetName kaip eilutęDim strDestName As StringDim iRws As Integer„Dim iCols“ kaip sveikasis skaičiusDim totRws As IntegerApšviesti eilutę kaip eilutęDim rngSource As Range"išjunkite ekrano atnaujinimą, kad viskas paspartėtųApplication.ScreenUpdating = Netiesa“pirmiausia sukurkite naują paskirties darbaknygęNustatykite „wbDestination = Workbooks.Add““gaukite naujos darbaknygės pavadinimą, kad pašalintumėte ją iš toliau pateiktos eilutėsstrDestName = wbDestination.NameDabar peržiūrėkite kiekvieną atidarytą darbaknygę, kad gautumėte duomenisUž kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadaNustatykite wbSource = wbUž kiekvieną „Sh In wbSource.Worksheets“„gaukite lapo eilučių ir stulpelių skaičiųsh. AktyvintiActiveSheet.Cells.SpecialCells (xlCellTypeLastCell). AktyvintiiRws = ActiveCell.RowiCols = ActiveCell.Columnnustatykite paskutinio lapo langelio diapazonąstrEndRng = sh.Cells (iRws, iCols). Adresas“nustatykite šaltinio diapazoną, kurį norite kopijuotiNustatykite rngSource = sh.Range ("A1:" & strEndRng)“raskite paskutinę paskirties lapo eilutęwbDestination.ActivateNustatykite wsDestination = ActiveSheetwsDestination.Cells.SpecialCells (xlCellTypeLastCell). PasirinkitetotRws = ActiveCell.Row“patikrinkite, ar yra pakankamai eilučių duomenims įklijuotiJei totRws + rngSource.Rows.Count> wsDestination.Rows.Count TadaMsgBox "Nepakanka eilučių duomenims į konsolidavimo darbalapį įdėti."Eik, ehPabaiga Jei“pridėkite eilutę įklijuoti į kitą eilutę žemynJei totRws 1 Tada totRws = totRws + 1rngSource.Copy Destination: = wsDestination.Range ("A" ir totRws)Kitas shPabaiga JeiKitas wbDabar uždarykite visus atidarytus failus, išskyrus norimąUž kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadawb. Uždaryti NetiesaPabaiga JeiKitas wb„išvalykite objektus, kad atlaisvintumėte atmintįNustatyti wbDestination = NiekoNustatyti wbSource = NiekoNustatyti wsDestination = NiekoNustatyti rngSource = NiekoNustatykite wb = nieko“, kai baigsite, įjunkite ekrano atnaujinimąApplication.ScreenUpdating = NetiesaIšeiti iš Subeh:„MsgBox“ klaida. AprašymasPabaiga Sub

Visų atvirų darbaknygių lapų sujungimas į vieną aktyvios darbaknygės darbalapį

Jei norite perkelti informaciją iš visų kitų atidarytų darbaknygių į tą, kurioje šiuo metu dirbate, galite naudoti šį kodą žemiau.

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081 Sub CombineMultipleSheetsToExisting ()Dėl klaidos GoTo eh“deklaruoti kintamuosius, kad būtų laikomi reikalingi objektaiDim wbDestination As WorkbookDim wbSource As WorkbookDim wsDestination As WorkheetDim wb Kaip darbo knygaDim sh kaip darbalapisApšviesti strSheetName kaip eilutęDim strDestName As StringDim iRws As Integer„Dim iCols“ kaip sveikasis skaičiusDim totRws As IntegerDim rngEnd As StringDim rngSource As Range“nustatykite paskirties knygos aktyvų darbaknygės objektąNustatykite wbDestination = ActiveWorkbook“gaukite aktyvaus failo pavadinimąstrDestName = wbDestination.Name"išjunkite ekrano atnaujinimą, kad viskas paspartėtųApplication.ScreenUpdating = Netiesa"pirmiausia sukurkite naują paskirties darbalapį aktyvioje darbaknygėjeApplication.DisplayAlerts = Netiesatęsti kitą klaidą, jei lapo nėraDėl klaidos Tęsti toliau„ActiveWorkbook.Sheets“ („Konsolidavimas“). Ištrinti"iš naujo nustatykite klaidų gaudyklę, kad pabaigoje pereitumėte prie klaidų gaudyklėsDėl klaidos GoTo ehApplication.DisplayAlerts = Tiesa“pridėkite naują lapą prie darbo knygosSu „ActiveWorkbook“Nustatykite wsDestination = .Sheets.Add (After: =. Sheets (.Sheets.Count))wsDestination.Name = "Konsolidavimas"Pabaiga suDabar peržiūrėkite kiekvieną atidarytą darbaknygę, kad gautumėte duomenisUž kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadaNustatykite wbSource = wbUž kiekvieną „Sh In wbSource.Worksheets“'gaukite lapo eilučių skaičiųsh. AktyvintiActiveSheet.Cells.SpecialCells (xlCellTypeLastCell). AktyvintiiRws = ActiveCell.RowiCols = ActiveCell.ColumnrngEnd = sh. Ląstelės („iRws“, „iCols“). AdresasNustatykite rngSource = sh.Range ("A1:" & rngEnd)“raskite paskutinę paskirties lapo eilutęwbDestination.ActivateNustatykite wsDestination = ActiveSheetwsDestination.Cells.SpecialCells (xlCellTypeLastCell). PasirinkitetotRws = ActiveCell.Row“patikrinkite, ar yra pakankamai eilučių duomenims įklijuotiJei totRws + rngSource.Rows.Count> wsDestination.Rows.Count TadaMsgBox "Nepakanka eilučių duomenims į konsolidavimo darbalapį įdėti."Eik, ehPabaiga Jei“pridėkite eilutę įklijuoti į kitą eilutę žemyn, jei nesate 1 eilutėjeJei totRws 1 Tada totRws = totRws + 1rngSource.Copy Destination: = wsDestination.Range ("A" ir totRws)Kitas shPabaiga JeiKitas wbDabar uždarykite visus atidarytus failus, išskyrus norimąUž kiekvieną wb programoje. Darbo knygosJei wb.Vardas strDestName Ir wb.Name "PERSONAL.XLSB", tadawb. Uždaryti NetiesaPabaiga JeiKitas wb„išvalykite objektus, kad atlaisvintumėte atmintįNustatyti wbDestination = NiekoNustatyti wbSource = NiekoNustatyti wsDestination = NiekoNustatyti rngSource = NiekoNustatykite wb = nieko“, kai baigsite, įjunkite ekrano atnaujinimąApplication.ScreenUpdating = NetiesaIšeiti iš Subeh:„MsgBox“ klaida. AprašymasPabaiga Sub

Padėsite svetainės plėtrą, dalintis puslapį su draugais

wave wave wave wave wave