Macro om Word-document op te slaan met enkel naam op te geven

Status
Niet open voor verdere reacties.

Stijn001

Gebruiker
Lid geworden
26 dec 2016
Berichten
11
Beste,
Zou er iemand een macro weten om een word document op te slaan op een vaste locatie (map is reeds aangemaakt. )Maar enkel de naam nog op te geven.

Alvast bedankt!!
 
Alvast bedankt. Maar kan het helaas niet openen. Als ik het doormail, mailt hij de link ernaar toe en heb helaas geen internet op het werk.
Bestaat de mogelijkheid om de code te kopiëren ??

Dank bij voorbaat.
 
De methode van Neuz is niet erg bruikbaar, omdat die in het document zelf zit met een knop. Je kunt beter een macro zetten in de Normal module ThisDocument. Bijvoorbeeld zoiets:
Code:
Private Sub Document_Close()
Dim Map As String
Dim Bestandsnaam As String
Dim Extentie As String
    
    Map = "D:\OneDrive\_HelpMij\Ms Word\stijn01\"                 'Vul hier tussen de aanhalingstekens de opslagmap in
    Bestandsnaam = InputBox("Typ de bestandsnaam", "Bestandsnaam invullen")
    Extentie = ".docx"                          'Vul hier tussen de aanhalingstekens de extentie in (docm is word incl macro's)
    If Not Bestandsnaam = "" Then
        ActiveDocument.SaveAs FileName:=Map & Bestandsnaam & Extentie
        MsgBox "Uw document is met succes opgeslagen.", vbInformation, "Opslaan"
    Else
        ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
    End If

End Sub
 
OctaFish,

Thanks voor het aanpassen deze is inderdaad makkelijker.
Deze wordt geactiveerd op het moment van sluiten van het worddocument.

Groet Neuz
 
Met nog een klein foutje er in, want het document wórdt al afgesloten, dus de Else moet er eigenlijk uit. Dan krijg je dus dit:
Code:
Private Sub Document_Close()
Dim Map As String
Dim Bestandsnaam As String
Dim Extentie As String
    
    Map = "D:\OneDrive\_HelpMij\Ms Word\stijn01\"                 'Vul hier tussen de aanhalingstekens de opslagmap in
    Bestandsnaam = InputBox("Typ de bestandsnaam", "Bestandsnaam invullen")
    Extentie = ".docx"                          'Vul hier tussen de aanhalingstekens de extentie in (docm is word incl macro's)
    If Not Bestandsnaam = "" Then
        ActiveDocument.SaveAs FileName:=Map & Bestandsnaam & Extentie
        MsgBox "Uw document is met succes opgeslagen.", vbInformation, "Opslaan"
    End If

End Sub
Wel dus in de Normal.dot(m), én als nadeel dat je bij elk document de vraag krijgt. Of je nu wilt of niet. Persoonlijk zou ik dat zo dus niet willen. Al kun je nog wel weer iets inbouwen dat de macro nog kijkt naar documenten die aan een specifieke sjabloon hangen bijvoorbeeld, of elders een gemeenschappelijk kenmerk hebben.
 
Afsluiten hoeft het document niet. Als de volgende met het document werkt, slaat men het bestand telkens op als de dag +(6u of 14u of 22u) zat dus te denken of het niet mogelijk zijn in plaats van een inputbox dat men de input haalt uit een tekstvak? Op de rechterbovenhoek staat er reeds een tekstvak met de datum en het uur. ( bv 01-02-2017 om 14u) en via een knop dan de macro laten uitvoeren.
 
Zou er iemand een oplossing kunnen bieden op mijn laatste vraag? Bestaat de mogelijkheid om de naam van het bestand automatisch te generen via een tekstvak in word ?

Alvast bedankt.
 
Afsluiten hoeft het document niet.
Je moet de macro toch ergens op triggeren; wat had je dan in gedachte? Wat je laatste vraag betreft: als het tekstvak een bladwijzernaam bevat, kun je daar naar verwijzen bij het opslaan.
 
Dan toch met een knop als trigger? In het tekstvak staat de datum en uur vermeld. Bv "15-02-2017 om 14u. "Zo zou het bestand opgeslagen mogen worden dan. Men werkt telkens verder op het vorig bestand en bij aanvang van de volgende shift verandert men het uur en/of de datum in geval van de nacht shift en slaat men op.
 
Misschien moet je afstappen van de knop, en het document automatisch opslaan en bijwerken. Dat kan met een paar macrootjes.

Code:
Private Sub Document_Open()
    ActiveDocument.BuiltInDocumentProperties("Title") = "Testje Opslaan"
    SaveTime
End Sub

Bovenstaande code zet je in de procedure ThisDocument; hij trapt de timer af bij het openen van het document. Verander de naam van je standaarddocument (Title), want die wordt gebruikt bij het opslaan van de versies.
Code:
Sub SaveTime()
    Application.OnTime When:=Now + TimeValue("00:03:00"), Name:="DoDate"
    Application.OnTime When:=Now + TimeValue("00:15:00"), Name:="DoSave"
End Sub

Code:
Sub DoSave()
Dim fld As FormField

With ActiveDocument
    Set fld = .FormFields("txtDatumTijd")
    If .Saved = False Then
        .SaveAs .BuiltInDocumentProperties("Title") & "_" & Format(fld.Result, "yyyyMMdd_HHmm")
    End If
    SaveTime
End With
End Sub

Code:
Sub DoDate()
    With ActiveDocument
        .Fields.Update
    End With
End Sub

Bovenstaande codes voeren het proces uit. Ik laat de velden wat vaker bijwerken, maar dat hoeft natuurlijk niet. In dat geval kun je volstaan met één code (DoSave) waar je het updaten als eerste laat doen. De tijdisintervallen kun je uiteraard ook zelf aanpassen.
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan