Toon posts:

[word/VBA] Documentnaam samenstellen met deelstreepje

Pagina: 1
Acties:

Verwijderd

Topicstarter
Titel klinkt een beetje vaag, maar ik weet ook niet hoe ik het anders moet omschrijven.

Ik heb een sjabloon in Word gemaakt, en de documenten die op basis van dat sjabloon worden gemaakt moeten op specifieke manier worden opgeslagen. Dat doe ik als volgt:

Visual Basic:
1
2
3
4
5
With .Dialogs(wdDialogFileSummaryInfo)
   .Title = ActiveDocument.FormFields("Domein").Result & _ 
            ActiveDocument.FormFields("Specificaties").Result 
   .Execute
End With


Dit levert keuig in het Save as... venster de suggestie DomeinSpecificaties.doc op. (waarbij Domein en Specificaties afhankelijk zijn van de keus van de gebruiker)
Wat ik wil is een streepje tùssen Domein en Specificaties, dus Domein-Specificatie.doc. Maar dat lukt niet :? En ik snap maar niet waarom niet 8)7
Als ik & "-" & ertussen zet, krijg ik alleen het eerste deel.
Als ik het streepje als string definieer krijg ik ook alleen het eerste deel; zonder aanhalingstekens, zonder &-teken krijg ik foutmeldingen.

Waar kijk ik nou overheen :?
Waarschijnlijk iets heel simpels, maar ik kan het ècht niet vinden :o

Verwijderd

De & vervangen door + wil nog wel eens een ander resultaat geven bij het koppelen van strings.

Verwijderd

Topicstarter
Die was ik vergeten er bij te zetten, had ik ook al geprobeerd, maar dat maakt ook niks uit :?

Verwijderd

Topicstarter
Niemand anders een idee :?

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Het is waarschijnlijk iets simpels.. maar ik kan je niet helpen op basis van halve info..
1)welke versie gebruik je? (dat verschilt namelijk in gebruik van .dialogs methode) .. vooral de eigenschap title.. die bestaat vanaf Office XP niet meer...
2) Je krijgt een SaveAs dialog als je .Dialogs(wdDialogFileSummaryInfo) aanroept? Das nieuw voor me...
3)Hoe lang wordt die titel naam precies?
dussum...

Verwijderd

Topicstarter
• Ik gebruik Word uit de Office 2000 suite.
• De code werkt verder als een tierelier, dus als het nieuw voor je is, blijkt maar weer dat je zelf ook nog 'es wat opsteekt van het probleem van een ander ;) Evt. kan ik wel meer code posten als dat je meer info verschaft voor het probleem, maar het draait m.i. om deze regels.
• De titelnaam varieert, maar kan bijvoorbeeld zijn ApplicatiesWord, of HardwarePrinter; niet echt extreem lang dus.

Voldoende aanvullende info zo? Zo half dacht ik niet dat het was :?

[ Voor 14% gewijzigd door Verwijderd op 08-11-2003 18:25 ]


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Heb je al "option explicit" bovenaan je module staan (just to be sure)?
Er staat nergens in die code dus .Dialogs(wdDialogFileSaveAs)
Post ff die code.. praat makkelijker..

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Soms kunnen bugs wel eens worden veroorzaakt ergens anders in de code dan je zou verwachten...Kumt door de vba debugger. Maar aangezien in programmeer technische zin geen bug wordt gemaakt.. zou je dus wel wat meer code moeten geven..

Verwijderd

Topicstarter
henkleerssen schreef op 08 november 2003 @ 18:28:
Heb je al "option explicit" bovenaan je module staan (just to be sure)?
Nee, nu wel. Maakt niet uit iig ;)
Er staat nergens in die code dus .Dialogs(wdDialogFileSaveAs)
Klopt, staat er na :)

Komt-ie:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
'Bestandsnaam Opslaan onder juiste naam
Sub FileSave()
    
   If ActiveDocument.Type = 0 And ActiveDocument.Name = ActiveDocument.FullName Then
        
      With Application
            
         With .Dialogs(wdDialogFileSummaryInfo)
         .Title = ActiveDocument.FormFields("Domein").Result &  _
         ActiveDocument.FormFields("Specificaties").Result  
         .Execute
         End With
            
         With .Dialogs(wdDialogFileSaveAs)
         If .Display = True Then .Execute
         End With
        
         End With

         Else
         ActiveDocument.Save
    
      End If

End Sub

Sub FileSaveAs()
   If ActiveDocument.Name = ActiveDocument.FullName Then
   Call FileSave
   
   Else

      With Application.Dialogs(wdDialogFileSaveAs)
         If .Display = True Then
         .Execute
         End If

      End With

      End If

End Sub


(en nee, ik heb de code niet helemáál zelf verzonnen...)
Dit is dus zonder poging tot streepje, zoals je ziet.

[ Voor 5% gewijzigd door Verwijderd op 08-11-2003 18:38 ]


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Raar verhaal allemaal...
Maar ik heb het ff voor je zo opgelost.. zeg maar als het fout is...
Visual Basic:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
Option Explicit

Public Type OPENFILENAME
    lStructSize As Long
    hwndOwner As Long
    hInstance As Long
    lpstrFilter As String
    lpstrCustomFilter As String
    nMaxCustFilter As Long
    nFilterIndex As Long
    lpstrFile As String
    nMaxFile As Long
    lpstrFileTitle As String
    nMaxFileTitle As Long
    lpstrInitialDir As String
    lpstrTitle As String
    flags As Long
    nFileOffset As Integer
    nFileExtension As Integer
    lpstrDefExt As String
    lCustData As Long
    lpfnHook As Long
    lpTemplateName As String
End Type

Public Declare Function GetSaveFileName Lib "comdlg32.dll" Alias "GetSaveFileNameA" (pOpenfilename As OPENFILENAME) As Long


Sub FileSave()
Dim GetFilename As String

   If ActiveDocument.Type = 0 And ActiveDocument.Name = ActiveDocument.FullName Then
        
        GetFilename = ShowSaveDialog(ActiveDocument.FormFields("Domein").Result & "-" & ActiveDocument.FormFields("Specificaties").Result)
        If GetFilename <> "" Then
            ActiveDocument.SaveAs (GetFilename)
        End If
    
    End If

End Sub


Function ShowSaveDialog(InitFileName As String) As String

Dim OFName As OPENFILENAME

    'Set the structure size
    OFName.lStructSize = Len(OFName)
    'Set the owner window
    'OFName.hwndOwner = Me.hWnd
    'Set the application's instance
    'OFName.hInstance = Application.hInstance
    'Set the filet
    OFName.lpstrFilter = "Word Files (*.doc)" + Chr$(0) + "*.doc" '+ Chr$(0) + "All Files (*.*)" + Chr$(0) + "*.*" + Chr$(0)
    'Create a buffer
    OFName.lpstrFile = Space$(254)
    'Set the maximum number of chars
    OFName.nMaxFile = 255
    'Create a buffer
    OFName.lpstrFileTitle = Space$(254)
    'Set the maximum number of chars
    OFName.nMaxFileTitle = 255
    'Set the initial directory
    OFName.lpstrFile = InitFileName & ".doc"
    'Set the dialog title
    OFName.lpstrTitle = "Save het word bestand"
    'no extra flags
    OFName.flags = 0

    'Show the 'Save File'-dialog
    If GetSaveFileName(OFName) Then
        ShowSaveDialog = Trim$(OFName.lpstrFile)
    Else
        ShowSaveDialog = ""
    End If

End Function

Succes ermee

  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Ooh ja.. je kunt met ShowSaveDialog natuurlijk veel meer .. dan alleen die stomme constante voor die ingebouwde dialog methode van Word..

Verwijderd

Topicstarter
Tnx :)
Wat ik jammer vind is dat ik deze code (nog) niet kan volgen, die ik zelf postte wel. Maar ja, die doet weer niet wat ik wil... Eigenlijk wil ik ook graag begíjpen waarom-ie het daar niet doet?

Die van jou doet het dus grotendeels prima, alleen bij bijv. de naam Besturingssystemen-Windows 2000 breekt-ie af bij Besturingssystemen-Win.doc , ondanks dat ik het maximum van karakters op 255 zie staan :?

edit:
Had je laatste post nog niet gezien...

[ Voor 7% gewijzigd door Verwijderd op 08-11-2003 19:53 ]


  • henkleerssen
  • Registratie: December 2000
  • Niet online

henkleerssen

Your life is as you narrate it

Verwijderd schreef op 08 november 2003 @ 19:52:
Tnx :)
Wat ik jammer vind is dat ik deze code (nog) niet kan volgen, die ik zelf postte wel. Maar ja, die doet weer niet wat ik wil... Eigenlijk wil ik ook graag begíjpen waarom-ie het daar niet doet?

Die van jou doet het dus grotendeels prima, alleen bij bijv. de naam Besturingssystemen-Windows 2000 breekt-ie af bij Besturingssystemen-Win.doc , ondanks dat ik het maximum van karakters op 255 zie staan :?

edit:
Had je laatste post nog niet gezien...
Je hoeft het in principe niet helemaal te begrijpen (het is een type definitie die je doorgeeft aan de WIndows api dll commondialogs..die vangt het path af.. vervolgens laat je word naar dit path saven).... je kunt gewoon het een en ander zelf veranderen aan strings.

btw die Besturingssystemen-Windows 2000 doet het hier prima..
verwarrende results van velden... btw ook

[ Voor 4% gewijzigd door henkleerssen op 08-11-2003 20:00 ]


Verwijderd

Topicstarter
henkleerssen schreef op 08 november 2003 @ 19:59:
[...]

Je hoeft het in principe niet helemaal te begrijpen
Maar ik wìl het wel :P
btw die Besturingssystemen-Windows 2000 doet het hier prima..
verwarrende results van velden... btw ook
Verwarrende results? De velden heten Domein en Specificaties. Domein is idd verwarrend (vonden wij ook toen we er net mee moesten werken), maar omvat dus zaken als Hardware, Applicaties, Diensten en Besturingssystemen. Specificaties zijn de onderdelen die onder de desbetreffende domeinen vallen.

Hij slaat trouwens wel volledig op, maar als ik dan wil openen, zie ik alsnog alleen Besturingssytemen-Wind.doc Zal wel aan mijn instellingen liggen dan.
Pagina: 1