• 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 in macro

Status
Niet open voor verdere reacties.

taktix

Gebruiker
Lid geworden
15 apr 2007
Berichten
61
Hoi,

In bijgevoegd bestand (Juli.xlsm) zit een macro. Deze werkt zoals ik wil (mailt een pdf naar een e-mailadres). Daar heb ik dan ook een Augustus.xlsm en een September.xlsm van. Deze zijn hetzelfde als Juli.xlsm maar dan met andere gegevens. Nu wil ik in het andere bestand (Overzicht.xlsm) een macro met een loop waardoor elk bestand in kolom B langsgegaan wordt en daarin de macro wordt geactiveerd zodat een pdf wordt gemaild. Het werkt niet zoals ik het nu heb. Iemand een idee hoe wel?

Bedankt!!

Dit is de macro die ik heb geprobeerd:

Code:
Sub MailPDFs()

    ' Declare
    Dim rngActivecell, rngColumn1, rngColumn2 As Range
    Dim strCurrentdir As String
    Dim wbInvulformulier As Workbook
    Dim strDatum As String
    Dim strWorkbook As String
    Dim oWb As Workbook
    Dim oSht As Worksheet
    
    ' Current working directory
    strCurrentdir = ActiveWorkbook.Path & "\"
    strWorkbook = naamWorkbook & ".xlsm"
    
    ' Loop
    Set rngActivecell = rngColumn1.Offset(1, 0)
    rngActivecell.Select
    
    Do
        ' Open workbook
        strWorkbook = rngActivecell.Offset(0, -1)
        Set oWb = Workbooks.Open(strCurrentdir & strWorkbook)
        If IsEmpty(oWb) Then
            MsgBox "Kan de excel, genaamd " & rngColumn1.Value & " ,niet vinden. Ik stop ermee."
            GoTo exit_command
        End If
    
Application.Run "Knop2_Klikken"

        ' Volgende waarde
        oWb.Save
        oWb.Close
        Set rngActivecell = rngActivecell.Offset(1, 0)
        
    Loop Until IsEmpty(rngActivecell)

exit_command:
End Sub
 

Bijlagen

Laatst bewerkt door een moderator:
Mits geordend en weloverwogen werken, is dit zeker te doen. Code in Overzicht.xlsm:

Code:
Sub MailPDFs()

    Dim rngCell As Range
    Dim oWb As Workbook
    
    For Each rngCell In ThisWorkbook.Sheets("Blad1").Range("B4:B6")
        On Error Resume Next
        Set oWb = Workbooks.Open(ActiveWorkbook.Path & "\" & rngCell & ".xlsm")
        If Err.Number Then
            Err.Clear
            MsgBox "Kan het Excelbestand genaamd " & rngCell & ".xlsm" & " niet openen. Ik stop ermee.", vbCritical, "Status"
            Exit Sub
        Else
            Application.Run oWb.Name & "!MijnProcedure"
            oWb.Close 0
        End If
    Next

End Sub

Mijn testcode in bestand Juli.xlsm:

Code:
Sub MijnProcedure()
    MsgBox ActiveWorkbook.Name
End Sub

Dit zal jou toelaten om uit te breiden met de PDF en Outlook code.

Wigi
 
Toch nog 1 vraag. Als ik een bestandsnaam heb die bijvoorbeeld "Juni, eerst helft" heet dan pakt ie hem niet. Is dit op te lossen in de code (dat heb ik het liefst) of moet ik dan de bestandsnamen aanpassen, doordat er bijvoorbeeld geen komma's in kunnen staan. Hij opent het bestand wel, maar voert de macro niet uit heb ik het idee.

Bedankt weer!
 
Laatst bewerkt:
Niet getest, maar denk wel dat dit werkt:

Code:
Application.Run "'" & oWb.Name & "'!MijnProcedure"
 
Toch wel, althans als je de quotes juist toepast.

Post de code van die procedure (MailPDFs) hier, zodat we kunnen zien wat er mis gaat.
 
Dit is de code van MailPDFs:

Code:
Sub MailPDFs()

    Dim rngCell As Range
    Dim oWb As Workbook
    
    For Each rngCell In ThisWorkbook.Sheets("Invulformulier").Range("B4:B22")
        On Error Resume Next
        Set oWb = Workbooks.Open(ActiveWorkbook.Path & "\" & rngCell & ".xlsm")
        If Err.Number Then
            Err.Clear
            MsgBox "Kan het Excelbestand genaamd " & rngCell & ".xlsm" & " niet openen.", vbCritical, "Status"
            Exit Sub
        Else
            Application.Run oWb.Name & "!Afbeelding2_Klikken"
            oWb.Close 0
        End If
    Next

End Sub
 
Laatst bewerkt:
Zoals ik dus al schreef, je hebt de quotes in de aanroep van de andere procedure, niet geplaatst.
 
Ja, klopt, maar ook als dat er bij staat lukt het niet. Dan worden ze alleen geopend en gesloten.

Code:
Sub MailPDFs()

    Dim rngCell As Range
    Dim oWb As Workbook
    
    For Each rngCell In ThisWorkbook.Sheets("Invulformulier").Range("B4:B22")
        On Error Resume Next
        Set oWb = Workbooks.Open(ActiveWorkbook.Path & "\" & rngCell & ".xlsm")
        If Err.Number Then
            Err.Clear
            MsgBox "Kan het Excelbestand genaamd " & rngCell & ".xlsm" & " niet openen.", vbCritical, "Status"
            Exit Sub
        Else
            Application.Run "'" & oWb.Name & "!Afbeelding2_Klikken"
            oWb.Close 0
        End If
    Next

End Sub
 
Taktix,

U bent altijd wel snel met reageren, maar zelf op onderzoek gaan is er denk ik ook niet echt bij bij u.

Je opent in uw code dus een single quote en sluit die niet af - wat is de logica daarvan? In post #5 heb ik dat bij mij alleszins wel gedaan.

Ook is het interessant om geen code te hebben in een Afbeelding_Klikken macro e.d., enkel de aanroep naar een algemene procedure (in een module).
Deze procedure kan je ook makkelijker aanspreken in een procedure zoals MailPDFs, in vgl met die "Klikken" macro.
 
Klopt. Keek er steeds overheen. Begreep het nut van de single quote ook niet. Het werkt inderdaad wel. Excuses!! Bedankt voor je hulp! Super!
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan