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

Status
Niet open voor verdere reacties.

Jesse99

Gebruiker
Lid geworden
2 dec 2010
Berichten
13
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?
 
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
 
Bedankt voor uw antwoord.

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

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 bewerkt:
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
 
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 bewerkt:
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
 
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...
 
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
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan