[Word 2007] Automatisch vormgeven bestandsnaam bij opslaan

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Ik ben bezig met een VB-scriptje dat bij het openen van een nieuw Word-document vraagt om de titel en, zodra er wordt gekozen voor "opslaan als" direct de bestandsnaam weergeeft als yyyy-mm-dd titel. Oftwel:
2010-02-15 mooi documentje.docx

Ik heb hiervoor de volgende VB-code gemaakt die ook daadwerkelijk werkt ;-)
Het enige dat mij niet lukt is om het automatisch uit te voeren wanneer de gebruiker klikt op "opslaan als...". Ik snap uiteraard dat je ook een aparte knop kan maken waarmee de gebruikers de boel opslaan, maar dat is dus juist niet de bedoeling! De bestandsnaam moet gewoon al standaard ingevuld staan als de gebruiker op "opslaan als" klikt. Als de gebruiker daarna bewust kiest voor een andere bestandsnaam, dan mag dat ook mogelijk zijn.

Dit is de gebruikte code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Sub Document_New()
Titel = InputBox("Bestandsnaam", "Titel")
End Sub
Public Sub FileSaveAs()

Dim dt As String
    
    dt = Format(Now(), "yyyy-mm-dd")
    
Dim Titel As String

    Titel = Format(Now(), "yyyy-mm-dd Titel")

 With Dialogs(wdDialogFileSaveAs)
        .Name = Titel
        .Show
   End With

End Sub

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Ik snap de vraag niet; dit doet toch al wat je wilt? Jouw code werkt hier prima. Misschien wil je ook FileSave() overriden en niet alleen SaveAs().

Of wil je het in een nieuw bestand doen? Dan wil je het in je normal.dot*-bestand opnemen. Let op: dan gebeurt het met elk bestand en elke keer als je opslaat. Alternatief is de code opnemen in elk bestand, maar dat lijkt me niet slim (is erg "vies"). En als je toch iets aanpast in normal.dot, kan je net zo goed meteen de knop overriden.

offtopic:
Beginnen met de datum is imho een slecht idee. Zet het dan achteraan. Als je wilt sorteren op datum, sorteer je op datum en niet op bestandsnaam terwijl sorteren op "onderwerp"=bestandsnaam nu onmogelijk wordt gemaakt.

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
FJK, In het ideale geval zou de code alleen gelden voor nieuwe bestanden. De volgorde van 'acties' zou dan worden:

1. Gebruiker start een nieuw Word-document en krijgt gelijk een dialogbox met de vraag "titel" erin.
2. Gebruiker begint van alles te typen
3. Gebruiker klikt in het lint op "Opslaan als..." en ziet gelijk de bestandsnaam yyyy-mm-dd titelvanhetdocument.docx als standaard ingevuld. Gebruiker slaat het bestand op.
4. Al deze VB-code wordt verwijderd uit het bestand "yyyy-mm-dd titelvanhetdocument.docx"

Is het zo wat duidelijker?

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

  • F_J_K
  • Registratie: Juni 2001
  • Niet online

F_J_K

Moderator CSA/PB

Front verplichte underscores

Tijdelijk VBA in een document zou ik niet doen. Al was het maar wegens docx versus docm.

Dan blijft alleen een normal.dot(m) over. Je kunt daar een check opnemen die ActiveDocument.NamePath uitleest bij save/saveas. Maak dus een saveas en een save die checkt of het bestand een pad heeft (ergo: is opgeslagen): zo niet vraag je filename uit en sla je op zoals je wilt, zo wel roep je de normale functies (Dialogs().Show resp. .Save) aan.

En zoals gezegd, doe het ook voor .Save(). Er zijn zat mensen die gewoon op ctrl-s drukken (of op het diskettetje drukken).

edit:
Ik deed iets te moeilijk.

[ Voor 15% gewijzigd door F_J_K op 15-02-2010 14:13 ]

'Multiple exclamation marks,' he went on, shaking his head, 'are a sure sign of a diseased mind' (Terry Pratchett, Eric)


Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Zou je me daar iets meer mee op weg kunnen helpen? Ik heb nu het volgende:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Document_New()
Titel = InputBox("Bestandsnaam", "Titel")

Dim dt As String
    
    dt = Format(Now(), "yyyy-mm-dd")
    
Dim bestandsnaam As String

    bestandsnaam = dt + Titel

With Dialogs(wdDialogFileSaveAs)
    .Name = bestandsnaam
    .Show
End With
End Sub


Maar dat wil nog niet werken. In principe zou bovenstaande wel voldoende functionaliteit bieden (en er gelijk voor zorgen dat gebruikers direct hun bestand opslaan).

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative


Acties:
  • 0 Henk 'm!

Verwijderd

volgende code in normal.dotm past de titel aan met gebruikersinput, op voorwaarde dat het blanco document (of sjabloon) de titel "dagelijkselijst" bevat. zo vermijd je dat voor documenten die hier niets mee te maken hebben, de macro uitgevoerd wordt.
wanneer de gebruiker het document wil opslaan, dan stelt word de bestandsnaam voor die automatisch gebaseerd wordt op de titel van het document, dus normaal gesproken hoeven de ingebouwde opslagroutines van word niet zelf aangepast.

Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
Private Sub Document_New()
  If ("dagelijkselijst" = ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle)) Then
    ActiveDocument.BuiltInDocumentProperties(wdPropertyTitle) = _
        InputBox _
          ( _
            "Geef bestandsnaam/titel in:", _
            "dagelijks document", _
            Format(Now(), "yyyy-MM-dd") & " aanwezigheidlijst" _
          )
  End If
End Sub

Acties:
  • 0 Henk 'm!

  • Frankster
  • Registratie: Januari 2002
  • Laatst online: 09-09 08:29
Ik heb het nu werkend gekregen (het moet in alle documenten doorgevoerd worden) met de volgende code:

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Private Sub Document_New()
Titel = InputBox("Bestandsnaam", "Titel")

Dim dt As String
    
    dt = Format(Now(), "yyyy-mm-dd")
    
Dim bestandsnaam As String

    bestandsnaam = dt + " " + Titel

With Dialogs(wdDialogFileSaveAs)
    .Name = bestandsnaam
    .Show
End With
End Sub


Het enige nadeel is nu dat het niet werkt als je Word gewoon opent, maar alleen als je "nieuw document" selecteert...

Een leven zonder feesten is als een verre reis zonder logement (Demokritos ca. 500 B.C.)
&Creative

Pagina: 1