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

EXCEL bewaren op server via VBA (maar verschillende locatie)

Status
Niet open voor verdere reacties.

BertDP

Gebruiker
Lid geworden
9 dec 2009
Berichten
29
Hallo,

Ik wil via een macro een xlsm-bestand bewaren in een bepaalde map op de server. De map verschilt naargelang de inhoud in cel A1.

Dus in A1 staat ofwel facturatie, ofwel rapportering ofwel archief.

Ik loop vast op de rode tekst. Als ik manueel de map toevoeg in de link (bv. Bestandsnaam = "Q:\FINANCE\DOC\FACTURATIE\" & CStr(ThisWorkbook.Sheets("Data").Range("A1").Value) & ".xlsm" dan lukt het wel.

Waarschijnlijk moet ik de code anders weergeven.

Misschien kan hier iemand een voorzet geven? (ik vond nog geen topic terug via dit forum).

Alvast bedankt!


Code:
Private Sub CommandButton2_Click()
Dim Bestandsnaam As String

Bestandsnaam = "Q:\FINANCE\DOC\FACTURATIE\[COLOR="#B22222"]ThisWorkbook.Sheets(Data).Range(A1).Value[/COLOR]\" & CStr(ThisWorkbook.Sheets("Data").Range("A1").Value) & ".xlsm"
ThisWorkbook.SaveAs Bestandsnaam



MsgBox "OK!", vbExclamation, "OK"

End Sub
 
Laatst bewerkt:
Je wilt dus een bestand opslaan met als naam de waarde van A1 in het blad Data en de map waarin het geplaatst moet worden heeft dezelfde naam? Kijk dan hier eens naar:
Code:
Bestandsnaam = "Q:\FINANCE\DOC\FACTURATIE\" & _
                Sheets("Data").Range("A1") & "\" & _
                Sheets("Data").Range("A1") & ".xlsm"

Als in cel A1 alleen te naam staat voor het bestand dan kan je de middelste regel weg laten.
Variabelen en de inhoud van een cel mogen nooit tussen " tekens staan.

Als extra zie je hier hoe je een lange regel voor de leesbaarheid over meerdere regels mag verdelen d.m.v. & _
Let daarbij op de spatie tussen de & en de _

Als je de inhoud van A1 op het blad Data inderdaad voor zowel de map- als de bestandsnaam nodig hebt mag je het ook zo schrijven:
Code:
With Sheets("Data").Range("A1")
    Bestandsnaam = "Q:\FINANCE\DOC\FACTURATIE\" & .Value & "\" & .Value & ".xlsm"
End With

Het woord ThisWorkbook mag je weglaten als het om het huidig geopende document gaat.

Je hebt zelfs de variabele bestandsnaam niet nodig. Wel moet je even aangeven dat het gaat om een document met macros:
Code:
With Sheets("Data").Range("A1")
    ThisWorkbook.SaveAs "Q:\FINANCE\DOC\FACTURATIE\" & .Value & "\" & .Value & ".xlsm", FileFormat:=52
End With
 
Laatst bewerkt:
Super Ed! Jouw voorstel werkt perfect! Bedankt voor de bijkomend toelichting!

Stel dat de submap nog niet bestaat onder de map facturatie. Kan ik dan in dezelfde code een regel toevoegen om een map te maken (met de naam in veld A1) en dan aansluitend het xlsm bestand opslaan?
 
Dat kan in ieder geval in dezelfde macro. Je kunt wel eenvoudig een functie maken die controleert of een opgegeven map bestaat en deze dan aanmaken op het moment dat dat niet zo is. Of dit bijvoorbeeld:
Code:
If Len(Dir("Q:\FINANCE\DOC\FACTURATIE\" & Sheets("Data").Range("A1"), vbDirectory)) = 0 Then
   MkDir "Q:\FINANCE\DOC\FACTURATIE\" & Sheets("Data").Range("A1")
End If

Nog even wat mee aan het spelen geweest. Kijk eens naar deze functie. Die maak je 1x en kan je dan overal gebruiken:
Code:
Function MakeFolder(Foldername As String) As Boolean
    If Len(Dir(Foldername, vbDirectory)) = 0 Then
        MkDir Foldername
        MakeFolder = True
    End If
End Function

En die gebruik je dan zo:
Code:
If MakeFolder("Q:\FINANCE\DOC\FACTURATIE" & Sheets("Data").Range("A1")) Then
    'Nieuwe map gemaakt
Else
    'Map bestond al
End If
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan