• 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.

Macro`s vauit een ander bestand aanroepen totaal 22 stuks

  • Onderwerp starter Onderwerp starter HWV
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

HWV

Terugkerende gebruiker
Lid geworden
19 feb 2009
Berichten
1.213
Beste Ik heb de volgende code om een macro op te starten vanuit een ander bestand.
per macro is het geen pronleem, enkel ik kan niet meerdere achter elkaar laten lopen:
Code:
Sub Conversie()

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

     Workbooks.Open Filename:="G:\Automatisering\Infomat Project2\Conversie\PPP\Hulp programma`s\4 Afnemers klantgegevens\4.xls"
           Windows("4.xls").Activate
              Application.Run "4.xls!Module2.Stap1_OphalenGegevens"
              

     Workbooks.Open Filename:="G:\Automatisering\infomat Project2\Conversie\PPP\Hulp programma`s\5 Artikelgroepen\5.xls"
           Windows("5.xls").Activate
              Application.Run "5.xls!Module1.uitvoeren_macro_artikelgroepen"
 
 With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With
              
End Sub

Hoe kan ik de macro`s wel aanroepen zodat deze in een nachtprocedure kunnen draaien.

groet HWV
 
HWV,

Ik heb er ook niet zoveel verstand van maar als je de macro's in een persoonlijke map zet.
Dan zijn ze toch overal zichtbaar als je dat aan vinkt?
Of denk ik te simpel?
 
Macro

Beste,

De macro laten lopen is geen probleem, en de persoonlijke map is geen optie nu voor mij.
Wel is het inderdaad makkelijk om macro`s op deze manier via de persn map aan te roepen ivm dat je ze dan altijd binnen handbereik heb.

Voor mij is het anders, ik wil dus 22 bestanden met elk een macro ( redelijk grote macro`s ), starten vanuit een andere bestand zodat deze in een nacht procedure kunnen draaien, om de volgende dag met up to date gegevens te werken.

Met mijn code kan ik wel één macro aanroepen via een ander bestand maar niet meerdere macro`s uit verschillende bestanden.

Groet HWV
 
HWV,

Misschien met een optie tijd?
Ik heb verder eigenlijk geen idee hoe dit op te losen.

Suc6
 
Beste Hoornvan,

bedankt voor het meedenken, ik hoop dat een ander mij nog verder op weg kan helpen.
ik zal kijken naar jou sugestie van tijd.

Groet HWV
 
Waarom kan je die macro's niet verzamelen in 1 bestand?

Dat het gaat om "redelijk grote macro's" (dixit) is vaak (niet altijd) te wijten aan het feit dat ze slecht geschreven zijn. Zelfs in het onwaarschijnlijke geval dat je aan de limiet van code per module komt, dan nog kan je meerdere modules in die ene file gebruiken.

Wigi
 
Macro

Beste,

Ik heb de heb de macro`s ook nodig om per stuk nog om op de dag te update. Als ik de scripts bij elkaar gaat zetten dan raak ik het overzicht kwijt.
Het is in totaal een conversie.
Soms heb ik per bestand de macro`s al in verschilende module`s staan.
Ik heb een deel voortgezet van mijn voorganger die een andere manier van schrijven had, en als ik daar in gaat wijzigen raak ik echt de kluts kwijt ( ik zie ze nu al vliegen al die cijfers en lettertjes )

Is het in het totaal niet mogelijk. want dan moet ik alles met de hand egaan doen, zit ik niet echt op te wachten.

Groet HWV
 
Misschien een oplossing

Beste,

graag zou ik willen weten of er ervaring is met de volgende oplossing.

Ipv dat ik elke macro wil aanroepen vanuit één bestand kan ik toch ook aan het einde van elk bestand het volgende bestand aanroepen.
Is hier ervaring mee of is dit een oplossing die problemen gaat opleveren.
Ik denk in aantal uren dat het ongeveer in totaal 12 uur gaat duren voor dat hij in zijn geheel klaar is.

groet HWV
 
Hoi,

Misschien is onderstaande een oplossing
Code:
set apExcel = CreateObject("Excel.Application")
set wkBook = apExcel.Workbooks.Add ("Your_book_here")
apExcel.run "Your_macro_here"
wkBook.Close
apExcel.Quit

Save it as a file with extension .vbs, and use cscript from the command line to run it, something like:
c:/>cscript test.vbs
You may want to do more things to your workbook or the Excel application, maybe save it or save a copy; just add the code in the script as required.

Hope this helps,
Miguel

Bron:http://en.allexperts.com/q/Excel-1059/2008/1/run-macro-command-line.htm

Op die manier kun je al je macro's verzammelen in 1 VBS script of meerdere scipts maken, die je één voor één start bijvoorbeeld door een Dos (cmd) bestandje.

Ik doe het zelf voor het draaien van verschillende macro's binnen Access, die worden dan via de windows Scheduler op gezette tijden d.m.v een CMD gestart.
 
Bedankt

Beste Arno,

Bedankt voor je input,

Ik heb hier geen ervaring mee dus moet ik eerst gaan uittesten met een paar andere bestanden. De code hoe ik die moet vullen kan ik wel begrijpen, ik moet alleen nog even gaan zoeken hoe ik een een CMD bestandje moet maken.

Misschien kan je een voorbeeld van zo`n CMD bestand posten zodat ik daarvanuit kan gaan werken.

Groet HWV
 
Ik denk in aantal uren dat het ongeveer in totaal 12 uur gaat duren voor dat hij in zijn geheel klaar is.

Mag ik dan vragen wat daarin allemaal zoal gebeurt? Dit lijkt me echt ongelooflijk lang om eerlijk te zijn.

Voor de rest zou ik toch onderzoeken waarom het lukt met 1 macro, maar niet met 22. Op zich is dat toch enkel maar "dezelfde" code gebruiken, enkel met een ander bestand, andere naam van de procedure, enz.

Wigi
 
In het kort

Beste Wigi,

Ik zal in het kort proberen uit te leggen wat er allemaal gebeurd.

Het zijn in totaal 22 conversie`s.
Zo wordt er uit ons oude systeem gegevens gehaald en worden in een tekst file gezet.
Die gegevens om deze gegevens naar excel te halen moet dit gebeuren door te spitsen ivm het totaal wel op kan lopen tot 750000 regels daar moet de niet bruikbare regels uit gehaald worden. Nadat het is opgeschoond moeten de bestanden weer samengevoegd worden tot 1 bestand. Als ik nu bijvoorbeeld de NAW gegevens neem dan moet daar het volgende ook nog mee gebeuren
-Telefoonnummers moeten de vreemde tekens eruit gehaald worden
-Faxnummer vreemde tekens eruit gehaald worden
-Deze moeten gecontroleerd worden met landcode , en zo de juiste land nummering voor de telefoonnummers gezet worden.
-Dan moet de opbouw van adresgegevens 1, 2, 3, 4 opgebouwd worden voor een juiste plaatsing in ons nieuwe systeem.
- Btw nummers moeten voor bv Nederland beginnen met NL spatie en als deze niet bekend is met NL 0 dit geld zo voor alle landen.
E-mail adressen website moeten gecontroleerd worden op foute invoer.
-Er bepaalde voorwaarde van levering , franco , vrachtkosten, leverdagen, levertijden oet worden samengevoegd.

En zo nog meer zaken met betrekking tot de NAW gegevens

Dit is dan nog maar één punt die ik bespreek en zo dus nog 21.
Is werk geweest voor mij van ruim 3 maanden, en met behulp van het forum hier zo ver gekomen. Omdat niet altijd de juiste kennis aanwezig was is het een lange maar werkende code`s geworden.
Vandaar dat ik deze op deze manier wilde aanroepen om ze in één keer te starten.

Groet HWV
 
Beste Wigi,

Ik zal in het kort proberen uit te leggen wat er allemaal gebeurd.

Het zijn in totaal 22 conversie`s.
kan lopen tot 750000 regels daar moet de niet bruikbare regels uit gehaald worden.-Telefoonnummers moeten de vreemde tekens eruit gehaald worden
-Faxnummer vreemde tekens eruit gehaald worden
-Deze moeten gecontroleerd worden met landcode , en zo de juiste land nummering voor de telefoonnummers gezet worden.
-Dan moet de opbouw van adresgegevens 1, 2, 3, 4 opgebouwd worden voor een juiste plaatsing in ons nieuwe systeem.
- Btw nummers moeten voor bv Nederland beginnen met NL spatie en als deze niet bekend is met NL 0 dit geld zo voor alle landen.
E-mail adressen website moeten gecontroleerd worden op foute invoer.
-Er bepaalde voorwaarde van levering , franco , vrachtkosten, leverdagen, levertijden oet worden samengevoegd.

Vandaar dat ik deze op deze manier wilde aanroepen om ze in één keer te starten.

Groet HWV

Ik ben ergens toch niet goed mee waarom er dagdagelijks "750000 regels" moeten omgezet worden > is er dan geen controle op reeds bestande ( klanten ) gegevens ?
Dan controle op e-mail en www adressen > postorder ?? is dat als marketing > kan eens per week /maand .
Ik heb diverse topics gezien / gelezen en ook mee ........ ik heb nooit kunnen uitmaken dat dit zo gigantisch was . Moeten het selecteren van de gegevens uit die andere bestanden niet via een java programmatie aangepakt worden is excel hiervoor nog aangewezen als primo ? Ik ben nu niet direct geplaatst om hierover te oordelen maar ik vermoed dat er voor excel ook een grens bestaat .
 
Laatst bewerkt:
Hoi,

Ik zeg niet dat CMD de oplossing is. Misschien dat alle macros onderbrengen in 1 Excel (verschillende modules) of zoals trucker10 zegt, d.m.v. een andere programma al het een en ander doen (bijvoorbeeld Access), betere oplossingen zijn.


Mocht je toch met een CMD willen werken dan staat hieronder een voorbeeldje
Open notepad
Maak code bijvoorbeeld zoals
Code:
@Echo off
"c:\Windows\system32\cscript.exe" "C:\Users\arno\Desktop\test.vbs"
Path en bestandsnaam moet je natuurlijk aanpassen
 
Duidelijkheid

Beste,

Ik geloof dat ik niet duidelijk ben geweest of dat ik misschien verkeerde informatie heb gegeven ivm het updaten van de gegevens.

Als voorbeeld gaf ik aan dat het dagelijks gedaan moet worden maar de situatie is als volgt.

Als de conversie van mij kant gedaan is moet er wanneer we over gaan naar het nieuwe systeem de gegevens geupdate worden dus de actuele informatie moet over gezet worden.
met het in de nacht laten draaien van de gegevens die heb ik nodig voor de test omgeving dit zal ongeveer denk ik 5 keer nog moeten gebeuren.

Code:
@Echo off
"c:\Windows\system32\cscript.exe" "C:\Users\arno\Desktop\test.vbs"

Tot zover is dit duidelijk Arno, maar zet ik dit in een bat file ?



PS Trucker,

Je heb mij inderdaad verschillende malen hiermee geholpen, en zo op het forum heel veel mensen.
Misschien is Excel niet de juiste manier, mijn situatie is zo dat voor mij het beste is maar de conversie staat er en is klaar, nu enkel nog dat het achter elkaar gaat lopen.

Om een voor beeld te geven hoe ik het nu doet.
aan het einde van conversie 1 roep ik conversie 2 op in conversie 2 roep ik conversie 3 op enz.
Nu is het zo dat ik niet de bestanden kan sluiten na het draaien van de conversie 1 als ik dan naar 2 gaat.
Dit zou ik kunnen opvangen door aan het einde een conversie te draaien die dan de conversie 1 t/m 22 sluit !

Groet HWV.
 
Tot zover is dit duidelijk Arno, maar zet ik dit in een bat file ?

Yep, bovenstaande zet je in een bat(CMD) file.
De 2de regel is de opdracht regel. Maak voor iedere actie een regel aan.
Deze regels worden dan 1 voor 1 afgehandeld
 
@HWV , ik heb net een testje gedaan met mijn macro's , ik liep tegen 1 probleempje op dat kan opgelost worden , nl ik heb hier en daar een msgbox , eens deze gedeactiveerd liepen de macro's door tot op het einde . wat heb ik gedaan
Code:
Sub tst()
Call ClearExcessRowsAndColumns
Call vernieuw_opmaak_chauffeur
Call wis_chaufforn
Call vernieuw_opmaak_chauffeur
Call vul_chaufform
Call pdf_chauffeur
End Sub

misschien voor inspiratie vatbaar !
 
Code:
Sub Conversie()
  With Application
    .ScreenUpdating = False
    .DisplayAlerts = False

    sq=split("4 Afnemers klantgegevens\4|5 Artikelgroepen\5|....","|")
    sp=split("4.xls!Module2.Stap1_OphalenGegevens|"5.xls!Module1.uitvoeren_macro_artikelgroepen|......","|")

    For j=1 to 22   
      With Workbooks.Add("G:\Automatisering\Infomat Project2\Conversie\PPP\Hulp programma`s\" & sq(j) & ".xls")
         .Activate
         Application.Run sp(j)
         .Close false
      End with
    Next
 
    .DisplayAlerts = True
    .ScreenUpdating = True
  End With
End Sub

Kan dit niet eenvoudiger ?
Jawel: geef de uit te voeren macro in ieder bestand dezelfde naam (bijv. conversie). dan kan de variabele sp vervallen:

Code:
    sq=split("4 Afnemers klantgegevens\4|5 Artikelgroepen\5|....","|")
    For j=1 to 22   
      With Workbooks.Add("G:\Automatisering\Infomat Project2\Conversie\PPP\Hulp programma`s\" & sq(j) & ".xls")
         .Activate
         Application.Run "conversie"
         .Close false
      End with
    Next

Kan dat niet eenvoudiger ?
Jawel: zet alle conversiebestanden in 1 aparte directory; dan is variabele sq overbodig:

Code:
    c0 = dir("G:\Automatisering\Infomat Project2\Conversie\PPP\Hulp programma`s\*.xls")
    Do   
      With Workbooks.Add(c0)
         .Activate
         Application.Run "conversie"
         .Close false
      End with
      c0=dir
    Loop until c0=""
Zo kun je met 9 regels code je computer 12 uur bezighouden.
 
Laatst bewerkt:
Fout bij code

Beste,

Bedankt voor de code`s

Ik heb de code`s getest en het volgende ondervonden.
Zodra ik code 1 en 2 of 3 test dan maakt hij van het bestand wat hij opent een andere naam, hij voegt een 1 toe dus wordt het ipv 5.xls dan 51.xls en geef de melding dat hij de macro "TotaalConversie" niet kan vinden.

Code:
Fout 1004 tijdens uitvoering:
De macro TotaalConversie kan niet worden gevonden

Code:
Sub Conversie()

With Application
    .ScreenUpdating = False
    .DisplayAlerts = False
End With

    c0 = Dir("G:\Automatisering\Infomat Project2\Conversie\PPP\Hulp programma`s\Totaal\*.xls")
    Do
      With Workbooks.Add(c0)
         .Activate
         Application.Run "TotaalConversie"
         .Close False
      End With
      c0 = Dir
    Loop Until c0 = ""
    
With Application
    .DisplayAlerts = True
    .ScreenUpdating = True
End With

End Sub

Groet HWV
 
Het veilige van mijn macro is, dat niet het oorsponkelijke bestand wordt gebruikt maar een kopie daarvan. Excel geeft die kopie automatsich een naam door er een 1 achter te zetten. Dat maakt verder niets uit want het bestand wordt niet opgeslagen maar na de uitvoering van de macror gesloten. Deze werkwijze beschermt de integriteit van de bestanden met alle gegevens en de macro's.
Ik kan van hieraf niet zien in welke module je de macro's in het bestand hebt staan.
Jij kunt het controleren: stop de macro na de opdracht 'workbooks.add'.
Met Alt-F8 kun je kijken waar de macro zich bevindt (en of je de naam goed hebt ingevoerd).
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan