• 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.

Ongeldig buiten pocedure

Status
Niet open voor verdere reacties.

Hans290875

Gebruiker
Lid geworden
13 apr 2013
Berichten
38
Ik probeer een macro te maken die een in Excel gemaakte factuur opslaat in PDF waarbij in het opgeslagen bestand zowel de naam van de klant (cel B9) als het factuurnummer (cel H10) verwerkt worden.
In onderstaande macro krijg ik in regel 2 de compilatiefout 'ongeldig buiten procedure'.
Vermoedelijk zal dat dan ook in de 3e regel gaan plaats vinden.
Ook weet ik niet zeker of ik de string voor het opslaan van het bestand met de naam van de klant en het factuurnummer goed heb gedefineerd.

Omdat ik niet zoveel kaas heb gegeten van het maken van marcro's, svp een niet te technische uitleg......

M.vr.gr.
Hans


Dim FacName As String

FacName = ActiveSheet.Cell("H10").Value
naam = ActiveSheet.Range("B9").Value
If Dir("C:\users\hans.hartmans\documents\verkoopfacturen" & naam &" & FacName & ".pdf") <> "" Then
MsgBox "Het bestand: " & naam & " & FacName & ".pdf bestaat reeds"
Exit Sub 'Verlaat de routine als het PDF-bestand reeds bestaat.
Else
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:="C:\ users\hans.hartmans\documents\verkoopfacturen " & naam & " & FacName & ".pdf", Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True

End If
End Sub
 
De rest van de code heb ik niet bekeken, maar begin hier maar eens mee.
Code:
[COLOR=#333333]FacName = ActiveSheet.[/COLOR][COLOR=#ff0000]Range[/COLOR][COLOR=#333333]("H10").Value[/COLOR]
 
Als het bestand niet bestaat, zal dit een error creëren (dat zie je dus ook gebeuren ;)). Probeer je procedure 'ns uit met een bestand dat WEL bestaat. Dan zie je of die wél werkt.
Klik daarna ff op deze link voor een mooie uitleg van Ron de Bruin over bestaande paden/bestanden...

[EDIT] O verrek... Na het lezen van de post van HSV zie ik dat met regel 2 écht de eerste regel van de procedure wordt bedoeld. Ha ha ha... :D Ik dacht dat die "2" een typo was en keek dus gelijk naar regel 3 (of dus nr.4 met de richtlijnen van de TS) omdat daar de meeste ellende zou kunnen ontstaan.... :p
 
Laatst bewerkt:
Wat is de naam van de Sub en waar heb je die staan?
Tevens staan er een aantal fouten m.b.t. " tekens in.
Probeer dit eens:
Code:
Sub NaamVanJeSub()
    Dim FacName As String
    Dim Naam As String
    Dim Pad As String
    
    Pad = "C:\users\hans.hartmans\documents\verkoopfacturen\"
    FacName = Range("H10").Value
    Naam = Range("B9").Value
    
    If Dir(Pad & Naam & FacName & ".pdf") <> "" Then
        MsgBox "Het bestand: " & Naam & FacName & ".pdf bestaat reeds"
        Exit Sub 'Verlaat de routine als het PDF-bestand reeds bestaat.
    End If
    
    ActiveSheet.ExportAsFixedFormat _
            Type:=xlTypePDF, _
            Filename:=Pad & Naam & FacName & ".pdf", _
            Quality:=xlQualityStandard, _
            IncludeDocProperties:=False, _
            IgnorePrintAreas:=False, _
            From:=1, To:=1, _
            OpenAfterPublish:=True
End Sub
 
Laatst bewerkt:
ongeldig buiten procedure

Ik heb de macro van Edmoor één op één in het Excel bestand gekopieerd.
In 1e instatie zonder de 'sub naam vanje sub'
Dan blijf ik de melding 'ongeldig buiten procedure' houden.
De melding komt gelijk al bij het pad in regel 5. Als ik regel 6 (Facname) of 7 (Naam) boven regel 5 (Pad) kopieer, krijg ik dezelfde melding bij of regel 6 of regel 7 (die dan regel 5 zijn).

Zet ik de regels weer neer zoals Edmoor ze heeft doorgegeven en plaats ik vervolgens de 'sub naam vanje sub' boven in de macro, dan krijg ik dezelfde melding in de macro van 'sub naam vanje sub' bij "'factuurtest(2).xlsm'!Module3.pdf"

Kortom, ik ben de weg helemaal kwijt, wie kan me helpen???
Met vriendelijke groet,
Hans

Onderstaand de macro en daar weer onder de macro van 'sub naam vanje sub'

Sub NaamVanJeSub()
Dim FacName As String
Dim Naam As String
Dim Pad As String

Pad = "C:\gebruikers\hans.HARTMANS\documenten\verkoopfacturen"
FacName = Range("H10").Value
Naam = Range("B9").Value

If Dir(Pad & Naam & FacName & ".pdf") <> "" Then
MsgBox "Het bestand: " & Naam & FacName & ".pdf bestaat reeds"
Exit Sub 'Verlaat de routine als het PDF-bestand reeds bestaat.
End If

ActiveSheet.ExportAsFixedFormat _
Type:=xlTypePDF, _
Filename:=Pad & Naam & FacName & ".pdf", _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
From:=1, To:=1, _
OpenAfterPublish:=True
End Sub


Application.Run "'factuurtest(2).xlsm'!Module3.pdf"
Range("J9").Select
ActiveSheet.Shapes.Range(Array("Button 4")).Select
Range("H10").Select
ActiveWorkbook.Save
ActiveSheet.Shapes.Range(Array("Button 4")).Select
Selection.OnAction = "'factuurtest(2).xlsm'!Module3.pdf"
Range("K16").Select
ActiveSheet.Shapes.Range(Array("Button 4")).Select
Application.Run "'factuurtest(2).xlsm'!Module3.pdf"
ActiveWorkbook.Save
Range("J8").Select
ActiveSheet.Shapes.Range(Array("Button 4")).Select
Selection.OnAction = "'factuurtest(2).xlsm'!Module3.pdf"
Range("L15").Select
Application.Goto Reference:="'factuurtest(2).xlsm'!Module3.pdf"
Application.Run "'factuurtest(2).xlsm'!Module3.pdf"
ActiveWorkbook.Save
Application.Run "'factuurtest(2).xlsm'!Module3.pdf"
 
Onderstaande regels zijn ook een aanroep naar andere Subs (macro).
Code:
[COLOR=#3E3E3E]Application.Run "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]Range("J9").Select[/COLOR]
[COLOR=#3E3E3E]ActiveSheet.Shapes.Range(Array("Button 4")).Select[/COLOR]
[COLOR=#3E3E3E]Range("H10").Select[/COLOR]
[COLOR=#3E3E3E]ActiveWorkbook.Save[/COLOR]
[COLOR=#3E3E3E]ActiveSheet.Shapes.Range(Array("Button 4")).Select[/COLOR]
[COLOR=#3E3E3E]Selection.OnAction = "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]Range("K16").Select[/COLOR]
[COLOR=#3E3E3E]ActiveSheet.Shapes.Range(Array("Button 4")).Select[/COLOR]
[COLOR=#3E3E3E]Application.Run "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]ActiveWorkbook.Save[/COLOR]
[COLOR=#3E3E3E]Range("J8").Select[/COLOR]
[COLOR=#3E3E3E]ActiveSheet.Shapes.Range(Array("Button 4")).Select[/COLOR]
[COLOR=#3E3E3E]Selection.OnAction = "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]Range("L15").Select[/COLOR]
[COLOR=#3E3E3E]Application.Goto Reference:="'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]Application.Run "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]
[COLOR=#3E3E3E]ActiveWorkbook.Save[/COLOR]
[COLOR=#3E3E3E]Application.Run "'factuurtest(2).xlsm'!Module3.pdf"[/COLOR]

Als deze Sub niet bestaat krijg je daar uiteraard ook een foutmelding.
Daarbij staat het niet binnen een Sub, maar in een loze ruimte onder 'End Sub'.

Ook in onderstaande regel ontbreekt de backslash aan het eind van de string.
Code:
Pad = "C:\gebruikers\hans.HARTMANS\documenten\verkoopfacturen[SIZE=4][COLOR=#ff0000]\[/COLOR][/SIZE]"
Ik mag aannemen dat 'range("H10")' niet met een backslash begint.
 
Misschien is het goed eerst eens met het boek 'VBA voor Dummies' van John Walkenbach te beginnen.

Alle macro's binnen met "Sub naam()"
en eindigen met "End Sub"

Elke letter die niet tussen deze bigin- en eindmarkering staat levert de foutmelding op die jij krijgt.
 
Laatst bewerkt:
Waarbij in Sub naam() de naam geen spaties mag bevatten zoals je doet in sub naam vanje sub
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan