• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Merge Excel Files Macro's behouden?

Senso

Meubilair
Lid geworden
13 jun 2016
Berichten
9.666
Besturingssysteem
W10 Pro en W11 Pro
Office versie
Office 2007 H@S en Office 2021 Prof Plus
Ik heb met VBA een aantal Excel files samengevoegd. Dit gaat goed. Maar hoe zit het nu met de macro's in die verschillende files? Ik zie ze niet. Wel worden de 'bladen/sheets' goed overgenomen. Ik zie de modules niet verschijnen in het samengevoegde bestand.
 
Als de antwoorden/oplossingen op internet beter zouden zijn, dan zou het allemaal niet zo veel tijd kosten. Er had een waarschuwing bij die code/artikel moeten staan dat de macro's niet worden overgenomen. Nu heb ik al een groot aantal files samengevoegd en heb ik de originelen permanent verwijderd. Daar ben je weer mooi klaar mee!

Maar goed, het is wel duidelijk dat het meeste van MS altijd prutswerk is en tijdverslindend zal blijven. Je hebt niet eens meer tijd om fatsoenlijk boodschappen te kunnen doen.
 
Dan ga je eerst boodschappen doen en daarna haal je de originelen terug van je backup.
 
En beantwoordt de vraag in #2
 
Dan ga je eerst boodschappen doen en daarna haal je de originelen terug van je backup.
Je gaat juist samenvoegen omdat je van 10 bestanden 1 bestand wilt maken en gooit de rest dan weg. Om dan nog eens die tien bestanden van een back-up te herstellen is tijdverslindend en schiet niet op.


En beantwoordt de vraag in #2
Het is een feit dat de macro's niet worden behouden en nu stel ik ook vast dat van de verwijzingen op een sheet naar een ander sheet een puinhoop wordt gemaakt en overal #WAARDE! komt te staan. Dat komt omdat in de formules het volledige pad en bestandsnaam komt te staan.


PHP:
Sub MergeExcelFiles()
  Dim fnameList, fnameCurFile As Variant
  Dim countFiles, countSheets As Integer
  Dim wksCurSheet As Worksheet
  Dim wbkCurBook, wbkSrcBook As Workbook

  fnameList = Application.GetOpenFilename(FileFilter:="Microsoft Excel Workbooks (*.xls;*.xlsx;*.xlsm),*.xls;*.xlsx;*.xlsm", Title:="Choose Excel files to merge", MultiSelect:=True)

  If (vbBoolean <> VarType(fnameList)) Then

    If (UBound(fnameList) > 0) Then
      countFiles = 0
      countSheets = 0

Application.ScreenUpdating = False
      Application.Calculation = xlCalculationManual

      Set wbkCurBook = ActiveWorkbook

      For Each fnameCurFile In fnameList
          countFiles = countFiles + 1

          Set wbkSrcBook = Workbooks.Open(Filename:=fnameCurFile)

          For Each wksCurSheet In wbkSrcBook.Sheets
              countSheets = countSheets + 1
              wksCurSheet.Copy after:=wbkCurBook.Sheets(wbkCurBook.Sheets.Count)
          Next

          wbkSrcBook.Close SaveChanges:=False

      Next
Application.ScreenUpdating = True
      Application.Calculation = xlCalculationAutomatic

      MsgBox "Processed " & countFiles & " files" & vbCrLf & "Merged " & countSheets & " worksheets", Title:="Merge Excel files"
    End If

  Else
      MsgBox "No files selected", Title:="Merge Excel files"
  End If
End Sub
 
@Senso

Zoals je weet kunnen macro's op 5 plaatsen opgeslagen worden:
- in de macromodule van het werkboek
- in de macromodule van een werkblad
- in een aparte macromodule
- in de macromodule van een Userform
- in een klassemodule

Als je een werkblad kopieert, worden alleen de macro's in de macromodule van dat werkblad meegekopieerd.

Alleen jij weet wat er zich in de bestanden die jij wil integreren bevindt:
- hoeveel werkbladen
- hoeveel userforms
- hoeveel macomodules
- hoeveel klassemodules
- hoeveel macro's in de macromoduel van het werkboek.

Voordat je enige code gaat schrijven/overnemen moet je:
- weten hoe die bestandn er uitzien
- wat je van die bestanden wil overnemen.

Pas daarna kun je gaan bepalen welke code je nodig hebt om je doel te bereiken.

Ik sluit niet uit dat het voor jou veel eenvoudiger is die bestanden 'handmatig' te integreren.
 
Zoals je weet kunnen macro's op 5 plaatsen opgeslagen worden:

Met die constructie ben ik het dus nooit eens geweest. Dat zou centraal moeten zijn en daar zou moeten worden vastgelegd wat het doel is. Dan heb je alles bij elkaar. Zal wel niet kunnen en te simpel gedacht zijn.

Ja, bedankt voor jouw uitleg. Echter als een module een naam heeft en een locatie in een sheet dan zou dat overgenomen moeten kunnen worden.

Ik sluit niet uit dat het voor jou veel eenvoudiger is die bestanden 'handmatig' te integreren.

Ja, mee eens, maar dat zal ik ook wel altijd fout doen. Want als ik een sheet over wil zetten naar een ander bestand zie ik de formules niet meer.

Maar goed, ondanks de fouten en dat soms alles tegenzit lukt ook veel en kan ik er toch nog rendement uit halen.

Bedankt voor de hulp.👍
 
maar goed, het is wel duidelijk dat het meeste van MS altijd prutswerk is
Het was al eens vermeld hier op dit forum, altijd kakken op MS terwijl je zelf de prutser bent.
 
Met die constructie ben ik het dus nooit eens geweest.

Ik verzet met ook al jaren tegen de zwaartekracht en de continentendrift zonder dat er naar me geluisterd wordt (althans ik merk geen verschil).
 
@snb
Zoals je weet kunnen macro's op 5 plaatsen opgeslagen worden:
Dat is voor mij al lastig, want wat zit waar? Kan ik niet onthouden. Als er een centraal bestand/map zou zijn waar deze worden opgeslagen heb je een soort bibliotheek. Als dan deze bibliotheek vanuit een Excel-stand aanroepbaar is, kun je een macro activeren. Wat je dan ter beschikking krijgt is vele malen groter dan het vastleggen van individuele macro's in een individueel Excel-bestand. Maar goed, zal wel te simpel gedacht zijn en niet kunnen.
 
op 100 macro 's die er geschreven worden zijn er 99,... voor een individueel bestand, anders maak je gebruik van de ingebouwde verwerkingsmechanismen.
 
Ook bij het ontwerp van een programmeertaal worden keuzes gemaakt. Als je met een bepaalde taal wil werken is het dus aanbevelenswaardig je de ontwerpuitgangspunten van die taal eigen te maken. Dat helpt aanzienlijk bij het exploreren van de mogelijkheden van die taal. Zo gauw niet meer 'alles kan' wordt je zoekrichting beperkt en kun je met minder moeite je doel vinden (vergelijkbaar met de zwaartekracht die jouw zoekmogelijkheden beperkt tot 1 richting; wat vele malen efficiënter is dan ook omhoog, naar voren en achteren en naar links en rechts te moeten zoeken).
Als je het niet met de ontwerpuitgangspunten van VBA eens bent kun je bijvoorbeeld een taal als Python proberen, die meer geschoeid is op het uitgangspunt dat jij wenselijk vindt.
 
Het is juist prettig dat alle code in 1 VBAProject bij elkaar zit in het bestand. Als alles "centraal" is opgeslagen, probeer dan maar eens een bestand met een beetje code naar iemand anders te sturen! Maar goed, Office Script heeft zo'n centraal opslag systeem, de scripts staan allemaal opgeslagen in SharePoint of OneDrive (for business) en niet in een Excel bestand. Het brengt weer geheel eigen problemen met zich mee, zoals de onmogelijkheid scripts buiten je eigen organisatie te delen. Is dat dan handig?

ALs je VBA code van het ene naar het andere bestand gekopieerd wil hebben, gebruik dan een tool as dit: https://jkp-ads.com/download.asp#CopyVBAProject
 
Terug
Bovenaan Onderaan