Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 9 van 9

Onderwerp: [Excel 2003 VBA] Sheet specifieke macro oproepen vanuit andere module

  • Vraag is opgelost
  1. #1
    Junior Member
    Geregistreerd
    2 december 2010
    Locatie
    Limburg

    Post [Excel 2003 VBA] Sheet specifieke macro oproepen vanuit andere module

    In Excel 2003 ben ik bezig een werkmap te maken met 5 werkbladen, voor een vereniging.

    De werkmap bevat 2 macro's, beide normale Subs:
    1. Een sheet specifieke macro: Blad4.Controleer
      Deze staat dus onder Blad4.
    2. Algemene macro: MaakRapport
      Deze staat in Module1, en geeft bij uitvoer een messagebox welke vraagt of de gebruiker eerst de andere macro wenst uit te voeren.


    Indien de gebruiker dit wil, moet vanuit de tweede macro dus de eerste worden aangeroepen. En dat is waar het mis gaat.

    Eerst heb ik geprobeerd:
    Code:
    Call Blad4.Controleer
    Dit resulteert in "Fout 1004 tijdens uitvoering: Door de toepassing of door object gedefinieerde fout".
    Ook heb ik met Application.Run gespeeld, maar elke keer loopt het uit in Fout 1004 bij het aanroepen van de macro.

    Kan iemand mij helpen hoe ik vanuit een andere module in dezelfde werkmap een sheet specifieke macro kan oproepen?

  2. #2
    Mega Honourable Senior Member
    Geregistreerd
    6 juli 2010
    Locatie
    Eindhoven
    Afstand tot server
    ±91 km
    helaas heb ik even geen beschikking over excel, maar zoek je niet de "RUN" functie?

    Application.Run ("blad4!controleer")

    mogelijk werkt "controleer" alleen ook, maar ik kan het helaas niet testen

  3. #3
    Junior Member
    Geregistreerd
    2 december 2010
    Locatie
    Limburg
    Bedankt voor uw antwoord.

    Application.Run ("Controleer")
    Deze werkt niet, de macro wordt niet gevonden (logisch want deze staat op Blad4, niet in Module1).

    Quote Origineel gepost door wampier Bekijk Bericht
    Application.Run ("blad4!controleer")
    Blad4 is het werkblad binnen dezelfde werkmap. Vóór het uitroepteken verwijs je naar de werkmap, dus deze syntax is niet juist.
    Application.Run ("blad4.controleer")
    zou in theorie wel juist moeten zijn (punt, ipv uitroepteken), en de macronaam wordt tijdens het ingeven ook herkend. Echter uitvoer resulteert in:
    Fout 1004: Methode Run van object _Application is mislukt

    Voor alle duidelijkheid, in de hoofdmacro heb ik eraan gedacht blad4 eerst te activeren wat noodzakelijk is voor de uitvoer ervan:
    ThisWorkbook.Sheets("rapport BK-controles").Activate
    De aangeroepen macro zelf is ook werkend, zonder problemen, wanneer deze handmatig wordt uitgevoerd.
    Laatst aangepast door Jesse99 : 2 december 2010 om 12:37

  4. #4
    Giga Senior
    Verenigingslid

    Geregistreerd
    4 april 2007
    Jouw oplossing: call blad4.controleer zou gewoon moeten werken. Wellicht zit er in controleer een fout. Of staat er ergens anders een tikfoutje.
    Plaats anders hier de code even of het hele spreadsheet.

    Ron

  5. #5
    Junior Member
    Geregistreerd
    2 december 2010
    Locatie
    Limburg
    Na lang zoeken ben ik het probleem toevallig tegengekomen, waar ik het nooit gezocht zou hebben.

    Ik ging er vanuit dat bij de Call opdracht de hoofdmacro zou wachten totdat de opgeroepen macro volledig is uitgevoerd. Dus niet. En daar komen ze met elkaar in de knoop, en weet de foutmelding niet beter dan dat het op de Call opdrachtregel mis gaat.

    Is er geen manier om de hoofdmacro te forceren te wachten tot de opgeroepen macro volledig is afgerond?
    Afhankelijk van de grootte van het bestand kan het tussen 5 seconden en een paar minuten duren, dus een pauzecommando met een vast opgegeven tijd direct onder de Call plaatsen is helaas geen oplossing.
    Laatst aangepast door Jesse99 : 2 december 2010 om 13:42

  6. #6
    Giga Senior
    Verenigingslid

    Geregistreerd
    4 april 2007
    Zet een soort van handshake op. De sub in de module zet een cel in een sheet op 1 en gaat iedere 5 seconden of zo kijken of deze al op 0 staat. De controleer sub zet aan het eind van de reis de cel op 0.
    Is misschien wat primitief maar werkt erg goed

    Ron

  7. #7
    Junior Member
    Geregistreerd
    2 december 2010
    Locatie
    Limburg
    Wat je zegt. Primitief of niet, het doet wat het moet doen en alles werkt nu perfect! Bedankt!

    Ik ben er nu bijna, er is nog één ding waar ik me enigszins zorgen over maak.
    Als de Controleer sub ergens op zou afbreken of vastlopen (we hopen van niet natuurlijk, maar het is niet onrealistisch en ik ben liever voorbereid), zit de MaakRapport sub vast in een oneindige lus...

  8. #8
    Giga Senior
    Verenigingslid

    Geregistreerd
    4 april 2007
    Er zijn wat variaties mogelijk.
    Je kunt van de handshake een heartbeat maken. Laat van uit de controleer sub de waarde op lopen en controleer of de waarde oploopt in de module sub. Loopt de waarde voor een aantal slagen niet op dan is er wellicht iets aan de hand.
    Of je laat de sub in de module hooguit 5 minuten wachten en geef dan een boodschap met met wachten of doorgaan of zo
    Of een combinatie van beide

    Ron

  9. #9
    Junior Member
    Geregistreerd
    2 december 2010
    Locatie
    Limburg
    Okee, daar ga ik mee aan de slag. Bedankt voor alle hulp!

Berichtenregels

  • U mag geen nieuwe vragen starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • U mag uw berichten niet bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Linkpartners
Aanbiedingen