Oproepen Private Sub vanuit andere werkblad

Status
Niet open voor verdere reacties.

gast0667

Gebruiker
Lid geworden
20 dec 2007
Berichten
136
Loop al een tijdje te klooien met onderstaand probleem:

Ik werk bijvoorbeeld in Excel in Blad1. Hier heb ik een button Knop1 geplaatst die na bepaalde handelingen over moet gaan naar Blad2. Dit lukt wel maar nu komt het.

In Blad2 staat ook een button die gekoppeld is aan een Private Sub Knop2.

Nu wil ik graag dat VBA het volgende doet:

Werkzaam in Blad1. Klikken op button Knop1. Zijn handelingen uitvoerd en vervolgens naar Blad2 gaan (dit lukt dus) en toen --> Automatisch (dus zonder de knop aan te klikken) de handelingen die achter button Knop2 zitten (dus de Private Sub Knop2) uitvoeren.

Wie kan mij helpen ?
 
Je kunt vanuit een werkblad niet de Private Sub aanroepen van een ander werkblad. Daarom is het ook een Private Sub. Wil je hem kunnen aanroepen vanuit andere werkbladen, dan moet je Private vervangen door Global. Dan zou hij moeten werken.
 
Duidelijk, maar Global werkt niet. Begint ie allemaal dingen aan te geven dat bepaalde declaraties niet werken.
 
... dan moet je Private vervangen door Global...
"Global"? Ik denk dat hij "Public" bedoelt!

Plaats de code die je nu hebt bij button2 in een public sub van sheet2.
Plaats dan als laatste regel van de code bij button1 : Worksheets(2).DeNaamVanDeSub

code van werkblad 1
Code:
Private Sub CommandButton1_Click()
  Worksheets(2).Select
  Worksheets(2).MijnSub
End Sub

code voor werkblad 2
Code:
Public Sub MijnSub()
  MsgBox "OK..."
End Sub
 
Je kunt de klik op de button afvangen met de on_click event macros die bij de knoppen horen.
De code voor de macro die gezamelijk moet uitgevoerd worden zet je gewoon in een normale sub in een module.
Vanuit de on_click macros kun je dan de eerder genoemde macro aanroepen.
mvg leo
 
"Global"? Ik denk dat hij "Public" bedoelt!

Plaats de code die je nu hebt bij button2 in een public sub van sheet2.
Plaats dan als laatste regel van de code bij button1 : Worksheets(2).DeNaamVanDeSub

code van werkblad 1
Code:
Private Sub CommandButton1_Click()
  Worksheets(2).Select
  Worksheets(2).MijnSub
End Sub

code voor werkblad 2
Code:
Public Sub MijnSub()
  MsgBox "OK..."
End Sub


:thumb: Thanx, hij werkt. :thumb:


Nog 1 vraagje: wat is het verschil dan tussen Public en Private ?




Tevens aan Leo: Bedoel je dat de buttons op verschillende manieren geactiveerd kunnen worden ? (want dat wist ik al)
 
...Nog 1 vraagje: wat is het verschil dan tussen Public en Private ? ...
Alles wat als Private gedefinieerd wordt is enkel zichtbaar binnen de module waarin het gedefinieerd is. Alles wat als Public gedefinieerd wordt, is ook daarbuiten zichtbaar.

Dus:
- de routine MijnSub() is gedefinieerd in de code-module van worksheet2 want dat is de worksheet waarmee de routine aan de slag moet.
- de routine MijnSub() wordt aangeroepen vanuit de code-module van worksheet1
- dat kan alleen als MijnSub() gedefinieerd werd als Public !
 
Laatst bewerkt door een moderator:
"Global"? Ik denk dat hij "Public" bedoelt!

:o Je hebt helemaal gelijk, ik vond het al zo vreemd klinken toen ik het schreef! Ben in elk geval blij dat het wel de goede oplossing was, alleen dan met de verkeerde benaming. En gelukkig is de vraagsteller tevreden met de aangedragen oplossingen.
 
Alles wat als Private gedefinieerd wordt is enkel zichtbaar binnen de module waarin het gedefinieerd is. Alles wat als Public gedefinieerd wordt, is ook daarbuiten zichtbaar.

Dus:
- de routine MijnSub() is gedefinieerd in de code-module van worksheet2 want dat is de worksheet waarmee de routine aan de slag moet.
- de routine MijnSub() wordt aangeroepen vanuit de code-module van worksheet1
- dat kan alleen als MijnSub() gedefinieerd werd als Public !

Dus met andere woorden, eigenlijk kan je beter alles in Public schrijven (kan je altijd e.e.a. oproepen vanuit andere werkbladen.

Bedankt voor de info.
 
public sub, is hetzelfde als sub zonder scope(levensduur) benaming.
Private sub blijft binnen het blad of module.
Alle event macro's zijn altijd private, dat doet excel zelf.
hier is meer info (engels).
mvg leo
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan