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

Fout in VBA-formule

Status
Niet open voor verdere reacties.

mary1995

Gebruiker
Lid geworden
2 mei 2013
Berichten
46
Hoi allemaal,

Ik heb een klein probleempje en het zal ook heel makkelijk te wezen om het op te lossen. Alleen weet ik zelf niet hoe.

De bedoeling van de formule is dat de factuur die ik maak opgeslagen wordt. Dat ik zelf de naam in kan vullen en zelf kan zeggen in welke map.
Voor deze functie heb ik de volgende formule:

[SQL]Sub Factuur_bewaren1()
Dim FacName As String, PDFplaats As String, sPath As String

FacName = InputBox("Welke naam wil je voor het PDF-document? Enkel naam, geen extentie !", "NAAM PDF-Document")
PDFplaats = InputBox("In welke bestaande map wil je het PDF-document plaatsen?", "IN WELKE MAP")
If Dir(PDFplaats & FacName & ".pdf") <> "" Then
MsgBox ("Het bestand:" & PDFplaats & FacName & ".pdf bestaat reeds")
Exit Sub
Else
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=PDFplaats & FacName & ".pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, _
IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True
End If
End Sub[/SQL]

Nu is het zo dat de factuur niet in de betreffende map wordt opgeslagen. Is er iets in de formule wat fout is?

Ik hoor het graag :)
 
Laatst bewerkt:
Eerste opmerking: op dit forum wordt verwacht dat je codetaal tussen codehaken plaatst,
dat bevordert de leesbaarheid.

Je vraagt via de macro om een mapnaam en een bestandsnaam.
Maar waar die map zich bevindt, dat blijkt niet uit jouw macro.
Voorbeeld: stel dat de naam van de map "Mary" is en de naam van het bestand "Mijnbestand.pdf".
De map Mary zou zich bv. kunnen bevinden in de map "Mijn Documenten". Je bestand moet dan bv. worden opgeslagen als:
C:\Documents and Settings\Jouw computergebruikersnaam\Mijn Documenten\Mary\Mijnbestand.pdf
Om fouten te voorkomen kun je best de naam van de map uit een keuzelijst laten kiezen, alles wat er vóór komt voeg je dan via de macro toe.
 
O sorry dat wist ik niet :)

Oke, ik dacht dat dit zo kon. Is het niet mogelijk om een factuur elke keer in een andere map op te slaan?
Elke klant heeft bij ons namelijk een eigen map met de facturen.
 
Natuurlijk kan dat.
Maar met het typen van mapnamen kan gemakkelijk een fout worden gemaakt, vandaar mijn aanbeveling om een mapnaam uit een lijst te laten kiezen.
 
Op die manier :)
Ik ga het proberen. Ik zal nog laten weten of het gelukt is of niet :)
 
Ik ben even gaan proberen, maar kom er niet uit.
Maar het lukt mij niet om een keuzelijst in te voeren waarin ook namen staan.
Ben ook op internet wezen zoeken maar vind niet wat ik moet hebben.
Hoe zou je dit dan kunnen oplossen?
 
Bedoel je dit misschien?

Code:
Sub Factuur_bewaren1()
    Dim PDFnaam As Variant
    
    PDFnaam = Application.GetSaveAsFilename(, "PDF Files (*.pdf), *.pdf")
                
    If VarType(PDFnaam) = vbString Then
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFnaam, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True
    End If
End Sub
 
Bedoel je dit misschien?

Code:
Sub Factuur_bewaren1()
    Dim PDFnaam As Variant
    
    PDFnaam = Application.GetSaveAsFilename(, "PDF Files (*.pdf), *.pdf")
                
    If VarType(PDFnaam) = vbString Then
        ActiveWorkbook.ExportAsFixedFormat Type:=xlTypePDF, Filename:=PDFnaam, _
        Quality:=xlQualityStandard, IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, From:=1, To:=1, OpenAfterPublish:=True
    End If
End Sub

Deze is inderdaad heel handig ja! Bedankt!
 
het lukt mij niet om een keuzelijst in te voeren waarin ook namen staan.
@Mary,
Om zoiets fraai te doen moet je een formulier (Userform) maken met daarin een textbox om de naam van het bestand in te voeren, een combobox of listbox om een keuze te maken uit de mappen waarin men het bestand wil opslaan, en een knop waarmee na dat invullen het opslaan wordt uitgevoerd. De keuze kan dan worden gemaakt in de combobox of listbox, maar dan moet die lijst met mappen wel ergens op een werkblad staan. Bij die userform, textbox, combobox of listbox, en knop, hoort ook vba-code waarmee bv. wordt gecontroleerd OF er wel een naam is ingevoerd, Of er in de combobox of listbox wel een keuze is gemaakt, enz. Allemaal niet zo verschrikkelijk moeilijk, maar als je het nog nooit gedaan hebt toch een hele boterham. HOE je een userform met die objecten maakt is op internet op tal van sites te vinden (zoek maar eens via "usereform maken"). Als je wil (na)maken wat je op internet vindt, moet je er natuurlijk wel de tijd voor nemen.
In afwachting van tot je bovenstaande hebt, zou je ook verder kunnen gaan met je huidige macro en een 'kunstmnatig' menu maken met een inputbox. Je moet je macro dan als volgt aanpassen:
Code:
Sub Factuur_bewaren2()
Dim FacName As String, PDFmap As String, Facnamevolledig As String, keuze As Integer
FacName = InputBox("Typ de naam die je aan het" & Chr(10) & _
"bestand wil geven (zonder.pdf)")
FacName = FacName & ".pdf"
keuze = InputBox("Kies de map (1-3) waarin je je bestand wil opslaan" & Chr(10) & _
"1. Mary" & Chr(10) & "2. Irene" & Chr(10) & "3. Leonard")
PDFmap = WorksheetFunction.Choose(keuze, "Mary", "Irene", "Leonard")
PDFmap = PDFmap & "\"
Facnamevolledig = "C:\Documents and Settings\Gebruikersnaam\Mijn Documenten\" & PDFmap & FacName
If Dir(Facnamevolledig) <> "" Then
MsgBox ("Het bestand bestaat al.")
Exit Sub
Else
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=Facnamevolledig
MsgBox (FacName & " is opgeslagen.")
End If
End Sub

Om de macro op jouw computer te laten werken is belangrijk:
1. dat je de mapnamen, hier Mary, Irene, en Leonard genoemd, aanpast/uitbreidt aan de mappen die jij wil gebruiken.
2. dat je de 'Facnamevolledig' aanpast aan het pad dat jij op jouw computer wil gebruiken.
3. vanzelfsprekend moeten de mapnamen in het pad/de map staan die in Facnamevolledig wordt vermeld.
Als dat allemaal het geval is, dan doet de macro wat hij moet doen, ik heb dat getest.
Daarna kun je enkele controleregels toevoegen: je kunt bv. best nagaan of als naam wel wat is ingevuld en of er wel een getal (in het voorbeeld tussen 1 en 3) is ingevoerd.
Succes ermee.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan