• 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 starten en stoppen vanuit ander macro

Status
Niet open voor verdere reacties.

Joost V

Gebruiker
Lid geworden
12 dec 2008
Berichten
23
Hallo iedereen en nog de beste wensen,

Ik ben op zoek naar een oplossing (indien mogelijk) voor het volgende.
Via een lopende macro1 (gekoppeld aan knop) kom ik halverwege deze macro1 bij een userform uit (macro2 gekoppeld aan userform).
Daar moet ik wat gegevens invullen in textboxen die later weggeschreven moeten worden in een werkblad (moet later nog gebeuren). In deze userform zitten 2 knoppen de ene is OK en de andere is SLUITEN bij het drukken op OK moet er teruggekeerd worden naar macro1, daar waar we gebleven waren. Hoe doe ik dit? ik heb al iets geprobeerd met goto Line1 maar ik geraak er niet uit
Iemand een idee?
Ik hoop dat mijn uitleg een beetje duidelijk is.

Groeten Joost V.
 
Kan je die code niet toevoegen en duidelijk omschrijven wat de bedoeling is, want op deze manier blijft het Chinees voor mij.
 
Een voorbeeld bestand zou handig zijn om te zien waar het mis gaat.
Normaal is het zo dat dat in macro 1 de userform met userform.show wordt opgeroepen.
Daarna wordt de code van de userform uitgevoerd bij b.v de OK button.
Zodra deze bij end sub komt, gaat de code weer verder met de eerste instructie na userform.show.
mvg leo

en natuurlijk ook de beste wensen voor 2009!
 
Bedankt voor de snelle reactie's
Hierbij de code van macro1 (CmdTabbladenKopieren)
Code:
Sub CmdTabbladenKopieren()
Dim ws As Worksheet
Dim wsNieuwBlad As Worksheet

'Controle van daum tussen 27 en 31 december
If (Month(Date) = 12 And Day(Date) = 29) Or (Month(Date) = 12 And Day(Date) <= 31) Then
GoTo line1
Else: MsgBox "Huidige datum valt niet tussen 27 en 31 December!", vbInformation, "Datum buiten berijk."
    Exit Sub

line1:
vraag1 = MsgBox("Zijn de gegevens van alle personen bijgewerkt?", vbYesNo, "LET OP!")
        If vraag1 = vbNo Then
        
        Exit Sub
    Else
    
    'Vul gegevens via userform in
    
    UfmGegevens.Show
Exit Sub
   
'Bij drukken op knop OK userform moet de macro hier verder gaan.

With ThisWorkbook

    'Lus doorheen tabbladen
    For Each ws In ThisWorkbook.Worksheets

        'Neem enkel bladen met huidige jaar in de naam
        If InStr(ws.Name, Year(Date)) > 0 Then
        
            'Kopieer blad en wis inhoud
            ws.Copy after:=.Sheets(.Sheets.Count)
                                           
            'Wijs toe aan variabele
            Set wsNieuwBlad = .Sheets(.Sheets.Count)
            
            wsNieuwBlad.Range("C4").Value = wsNieuwBlad.Range("F7").Value
            wsNieuwBlad.Range("B9:C32,E9:F28,F4,C6,F6").ClearContents
            wsNieuwBlad.Range("C1:D1").Select
            
            'Verander naam van toegevoegde blad
            wsNieuwBlad.Name = Replace(ws.Name, Year(Date), Year(Date) + 1)
        
            End If
            
        Next ws
    
    End With
    
    Set ws = Nothing
    Set wsNieuwBlad = Nothing
    End If
    End If
    
End Sub

en die van macro2 (CmdOK)
Code:
Sub CmdOK_Click()

    If TextBox1 = "" Then
        UfmGegevens.TextBox1.SetFocus
        MsgBox "Aantal snipperdagen invullen!"
        Exit Sub
    End If

    If TextBox2 = "" Then
        UfmGegevens.TextBox2.SetFocus
        MsgBox "Aantal compensatiedagen invullen!"
        Exit Sub
    End If

    If TextBox3 = "" Then
        UfmGegevens.TextBox3.SetFocus
        MsgBox "Omschrijving invullen!"
        Exit Sub
    End If

    If TextBox4 = "" Then
        UfmGegevens.TextBox4.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If TextBox5 = "" Then
        UfmGegevens.TextBox5.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If TextBox6 = "" Then
        UfmGegevens.TextBox6.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If MsgBox("Alle gegevens goed ingevuld?", vbOKCancel, "Bevestiging") = vbCancel Then Exit Sub

    'Hier moet ie dus verder met CmdTabbladenKopieren.
        
   
End Sub

Groeten Joost V.
 
Laatst bewerkt:
macro 2 kun je laten eindigen met een aanroep van de gewenste macro
dus:
Code:
Call CmdTabbladenKopieren
(call hoeft niet perse)

Bij macro1 endig je de macro na het userform met exit sub. Dan gebeurt er dus verder niets meer
Hier zijn verschillende oplossingen mogelijk.

Bv de rest van de code zetten in een userform event (gebeurtenis) van de OK button van het userform
dus :
Code:
Private Sub ComButOK_Click()
            'jouw code
end sub
 
Leofact,

Bedankt voor de hint ik ga er mee aan de slag, hier kan ik wel wat mee.

Groeten Joost V.
 
Ik ben er uit.
Ik heb de resterende helft van macro1 onder die van macro2 geplakt en hij werkt perfect.
Hierbij de code van macro1 (CmdTabbladenKopieren)

Code:
Sub CmdTabbladenKopieren()
Dim ws As Worksheet
Dim wsNieuwBlad As Worksheet

'Controle van daum tussen 27 en 31 december
If (Month(Date) = 12 And Day(Date) = 29) Or (Month(Date) = 12 And Day(Date) <= 31) Then
GoTo line1
Else: MsgBox "Huidige datum valt niet tussen 27 en 31 December!", vbInformation, "Datum buiten berijk."
    Exit Sub

line1:
vraag1 = MsgBox("Zijn de gegevens van alle personen bijgewerkt?", vbYesNo, "LET OP!")
        If vraag1 = vbNo Then
        
        Exit Sub
    Else
    
    'Vul gegevens via userform in
    
    UfmGegevens.Show

    End If
    End If
    
End Sub

en die van macro2 (CmdOK)

Code:
Sub CmdOK_Click()

    If TextBox1 = "" Then
        UfmGegevens.TextBox1.SetFocus
        MsgBox "Aantal snipperdagen invullen!"
        Exit Sub
    End If

    If TextBox2 = "" Then
        UfmGegevens.TextBox2.SetFocus
        MsgBox "Aantal compensatiedagen invullen!"
        Exit Sub
    End If

    If TextBox3 = "" Then
        UfmGegevens.TextBox3.SetFocus
        MsgBox "Omschrijving invullen!"
        Exit Sub
    End If

    If TextBox4 = "" Then
        UfmGegevens.TextBox4.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If TextBox5 = "" Then
        UfmGegevens.TextBox5.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If TextBox6 = "" Then
        UfmGegevens.TextBox6.SetFocus
        MsgBox "Omschrijving invullen"
        Exit Sub
    End If

    If MsgBox("Alle gegevens goed ingevuld?", vbOKCancel, "Bevestiging") = vbCancel Then Exit Sub

    Dim ws As Worksheet
    Dim wsNieuwBlad As Worksheet
    With ThisWorkbook

    'Lus doorheen tabbladen
    For Each ws In ThisWorkbook.Worksheets

        'Neem enkel bladen met huidige jaar in de naam
        If InStr(ws.Name, Year(Date)) > 0 Then
        
            'Kopieer blad
            ws.Copy after:=.Sheets(.Sheets.Count)
                                           
            'Wijs toe aan variabele
            Set wsNieuwBlad = .Sheets(.Sheets.Count)
            
            wsNieuwBlad.Range("C4").Value = wsNieuwBlad.Range("F7").Value
            wsNieuwBlad.Range("B9:C32,E9:F28,F4,C6,F6").ClearContents
            wsNieuwBlad.Range("C1:D1").Select
            
            'Verander naam van toegevoegde blad
            wsNieuwBlad.Name = Replace(ws.Name, Year(Date), Year(Date) + 1)
        
            End If
            
        Next ws
    
    End With
    
    Set ws = Nothing
    Set wsNieuwBlad = Nothing
   
        
   
End Sub

Ga het nu nog wat verder anpassen
Iedereen bedankt voor advies.
Groeten Joost V.
 
Mooi dat je weer verder kunt.
Succes met het uitwerken.

mvg Leo
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan