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

VBA directory path

Status
Niet open voor verdere reacties.

Lisett

Gebruiker
Lid geworden
4 jan 2013
Berichten
55
Ben ik weer!
Ik ben mijn excel bestand aan het afronden. Ik wil mijn code alleen nog iets beter maken. Ik heb een code die mijn excelblad apart opslaat. Dit werkt prima. Alleen ben ik het over de locatie nog niet helemaal eens. Er staat op dit moment nog gewoon: C:\Factuur\. Dit werkt ook prima, hij maakt een mapje Factuur aan op de C-schijf. Maar nu wil ik het iets universeler maken. Ik wil dat de "weg" is dat als je in een mapje je excel file hebt staan + een extra mapje. dat de excelbladen die ik opsla in het extra mapje komen. Is hier een code voor, of moet ik hier een hele VBA code voor aanmaken of is het een kwestie van mijn C:\Factuur\ aanpassen in iets anders?

Ik hoop dat jullie mij begrijpen! Alvast bedankt
 
Met
Code:
ActiveWorkbook.Path
kun je het pad van het opgeslagen werkboek opvragen. Daar kun je mee verder door de gewenste map toe te voegen.
Mvg Leo
 
Dit komt in de buurt. Als ik die code gebruik, dan maaktie een mapje aan in mijn documenten met de naam "ActiveWorkbook.Path"

Knipsel.PNG
Even een afbeelding voor de duidelijkheid. Ik zou graag willen dat vanuit het excel bestandje de werkbladen worden opgeslagen in "nieuwe map".
 
Dan kan je beter laten zien hoe je die regel van Leo hebt gebruikt want dat heb je dan niet gedaan zoals het moet. Dat zou ongeveer zo moeten zijn: ActiveWorkbook.Path & "\nieuwe map\"
 
Laatst bewerkt:
Code:
Public Const VerzamelFactuurDirectory As String = "ActiveWorkbook.Path"
 Path = VerzamelFactuurDirectory

Of zou ik Path = VerzamelFactuurDirectory moeten vervangen door ActiveWorkbook.Path??
 
Nee, zoals ik al zei gebruik je het niet zoals zou moeten. Het is een variabele en die mag dus niet tussen aanhalingstekens staan:
Code:
Public Const VerzamelFactuurDirectory As String = ActiveWorkbook.Path
Path = VerzamelFactuurDirectory

En dan nog dit:
Vermijdt het gebruik van correcte Engelse woorden als naam van een variabele. Dus Path zou je bijvoorbeeld sPath van moeten maken. Dit om te voorkomen dat je gereserveerde woorden gebruikt.
 
Knipsel.PNG
Nu krijg ik deze melding? De macro's zijn wel ingeschakeld.
 
Dat staat helemaal los van je initiële vraag en vergt dus meer uitleg. Je roept kennelijk ergens een macro aan en die wordt niet gevonden. De vraag is nu dus waar vandaan en hoe je de macro FactuurControle aanroept.
 
Maar als ik de aanhalingstekens weghaal, dan geeftie deze foutmelding. Het vreemde is alleen de naam VerzamelFactuurDirectory staan niet in de macro Factuurcontrole die de foutmelding geeft. Als ik weer de aanhalingstekens terug zet, dan doetie het gewoon weer.
 
Ik bedenk me net dat je voor een constante helemaal geen variabele mag gebruiken, dus op deze manier:
Public Const VerzamelFactuurDirectory As String = ActiveWorkbook.Path
krijg je de gewenste waarde er niet in en met aanhalingstekens is de waarde niet wat je wilt.

Wat is je bedoeling met die constante? ActiveWorkbook.Path is overal in je document gelijk, dus het heeft geen nut die in een constante te willen stoppen.
 
Laatst bewerkt:
Dus als ik het goed begrijp is ActiveWorkbook.Path een variabele die ik als constante definieer? Dat gaat dus niet, maar hoe zou ik dan wel het gewenste effect kunnen krijgen?
 
Door in de routine waar je het nodig hebt gewoon Activeworkbook.Path te gebruiken. Dus zonder een variabele. Doe bijvoorbeeld maar eens:
MsgBox ActiveWorkbook.Path
 
Laatst bewerkt:
Ik snap er ondertussen vrij weinig meer van... Als ik die code invoeg dan opent die het werkblad in een ander excel bestand, maar deze slaat excel niet automatisch op. Ik heb hier de code voor het opslaan, die geloof ik niet meer zo deugt ondertussen! haha Ik heb het even laten staan zoals ik het eerst had, dus zonder AcvtiveWorkbook erin. Misschien zette ik het wel op de verkeerde plek? De code doet alles wat ik wil behalve een plek om het op te slaan waar het excel-bestand ook staat.

Code:
Function FactuurOpslaan(FactNo As String, FactDate As Date) As String
  Dim WorkbookName As String, Path As String, Filenaam As String, Sheetname As String, CopyToBook As Workbook, OldInstelling As Integer

  Filenaam = FactuurSheet & Space(1) & MaandNaam(Month(Now)) & "-" & Year(Now) & ".xlsx"
  Sheetname = FactuurSheet & Space(1) & FactNo
  Path = VerzamelFactuurDirectory
  If Right(Path, 1) <> Application.PathSeparator Then Path = Path + Application.PathSeparator

  With CopyBook
    If Not PathExists(VerzamelFactuurDirectory) Then MkDir Path

    If FileExists(Path & Filenaam) Then
      If Not WorkbookIsOpen(Filenaam) Then Workbooks.Open Filename:=Path & Filenaam
      Set CopyToBook = Workbooks(Filenaam)
      CopyBook.Sheets(FactuurSheet).Copy After:=CopyToBook.Sheets(CopyToBook.Sheets.Count)
      With CopyToBook
        With .Sheets(FactuurSheet)
          .Cells.Copy
          .Cells.PasteSpecial Paste:=xlPasteValues
          .Range(Factuurnummer).Select
          .Name = SheetNameControl(Sheetname)
        End With
        .Save
      End With
    Else
      OldInstelling = Application.SheetsInNewWorkbook
      Application.SheetsInNewWorkbook = 1

      Set CopyToBook = Workbooks.Add
      CopyBook.Sheets(FactuurSheet).Copy before:=CopyToBook.Sheets(1)

      Application.DisplayAlerts = False
      With CopyToBook
        With .Sheets(FactuurSheet)
          .Cells.Copy
          .Cells.PasteSpecial Paste:=xlPasteValues
          .Range(Factuurnummer).Select
          .Name = Sheetname
        End With
        .Sheets(CopyToBook.Sheets.Count).Delete
        Application.DisplayAlerts = True
        .SaveAs Filename:=Path & Filenaam
        Application.SheetsInNewWorkbook = OldInstelling
      End With
    End If
    FactuurOpslaan = Path + Filenaam
    CopyToBook.Close
  End With
  Application.CutCopyMode = False
End Function
 
Activework.path geeft het pad terug waar vandaan het onderhanden werkboek is geopend. Dus, als het document is opgeslagen in C:\Documenten en daarvandaan is geopend, dan geeft Application.workbook "C:\Documenten" terug
Kijk ook nog eens naar het tweede gedeelte van wat ik schreef in #6.
 
Woehoe! Ik ben er bijna! Ook gelijk even je advies opgevolgd. Dacht het achteraf toe te passen om het af te maken, maar inderdaad beter om het gelijk maar even te doen. Alleen nog niet helemaal wat ik wil. Nu worden ze opgeslagen in dezelfde map als waar het bestand zelf ook staat. Is het ook mogelijk om het in een hoger mapje op te slaan? Dit is nu de code trouwens:
Code:
Function FactuurOpslaan(FactNo As String, FactDate As Date) As String
  Dim WorkbookName As String, sPath As String, Filenaam As String, Sheetname As String, CopyToBook As Workbook, OldInstelling As Integer

  Filenaam = FactuurSheet & Space(1) & MaandNaam(Month(Now)) & "-" & Year(Now) & ".xlsx"
  Sheetname = FactuurSheet & Space(1) & FactNo
  sPath = ActiveWorkbook.Path
  If Right(sPath, 1) <> Application.PathSeparator Then sPath = sPath + Application.PathSeparator

  With CopyBook
    If Not PathExists(ActiveWorkbook.Path) Then MkDir sPath

    If FileExists(sPath & Filenaam) Then
      If Not WorkbookIsOpen(Filenaam) Then Workbooks.Open Filename:=sPath & Filenaam
      Set CopyToBook = Workbooks(Filenaam)
      CopyBook.Sheets(FactuurSheet).Copy After:=CopyToBook.Sheets(CopyToBook.Sheets.Count)
      With CopyToBook
        With .Sheets(FactuurSheet)
          .Cells.Copy
          .Cells.PasteSpecial Paste:=xlPasteValues
          .Range(Factuurnummer).Select
          .Name = SheetNameControl(Sheetname)
        End With
        .Save
      End With
    Else
      OldInstelling = Application.SheetsInNewWorkbook
      Application.SheetsInNewWorkbook = 1

      Set CopyToBook = Workbooks.Add
      CopyBook.Sheets(FactuurSheet).Copy before:=CopyToBook.Sheets(1)

      Application.DisplayAlerts = False
      With CopyToBook
        With .Sheets(FactuurSheet)
          .Cells.Copy
          .Cells.PasteSpecial Paste:=xlPasteValues
          .Range(Factuurnummer).Select
          .Name = Sheetname
        End With
        .Sheets(CopyToBook.Sheets.Count).Delete
        Application.DisplayAlerts = True
        .SaveAs Filename:=sPath & Filenaam
        Application.SheetsInNewWorkbook = OldInstelling
      End With
    End If
    FactuurOpslaan = sPath + Filenaam
    CopyToBook.Close
  End With
  Application.CutCopyMode = False
End Function
 
Uiteraard mag je dan ook bijvoorbeeld dit doen:
sPath = ActiveWorkbook.Path & "\Nieuwe Map\"

Een stapje hoger kan wel maar is een stuk lastiger.
 
Ik denk dan dat ik een stap lager bedoelde? Dit is precies wat ik wilde! Bedankt voor alle hulp :)
 
Graag gedaan :)
 
Een beetje wieden kan altijd nog:

With CopyBook ????
If Not PathExists(ActiveWorkbook.Path) Then MkDir sPath

If FileExists(sPath & Filenaam) Then
If Not WorkbookIsOpen(Filenaam) Then Workbooks.Open Filename:=sPath & Filenaam
Set CopyToBook = Workbooks(Filenaam)
CopyBook.Sheets(Fac

dit kan ook:
Code:
on error resume next
MkDir sPath
with getobject( sPath & Filenaam)
     - - - - - - -
end with
 
Laatst bewerkt:
Nog niet helemaal... Op windows doet het het nu goed, maar nu wil ik het ook op een mac goed op kunnen slaan, en daar geeftie veel errors.. Weet iemand hoe dit te verhelpen is??
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan