Tipp 0339 Word-Dialog Speichern unter
Autor/Einsender:
Datum:
  Angie
15.06.2003
Entwicklungsumgebung:   Word 97
Mit den in Word integrierten Dialogfeldern können Benutzereingaben mit VBA gesteuert werden. Die Show-Methode des Dialog-Objekts zeigt eine Aktion in einem integrierten Dialogfeld an und führt diese Aktion aus, die Display-Methode dagegen zeigt ein Dialogfeld an, ohne die Aktionen im Dialogfeld auszuführen.
Die Display-Methode eignet sich besonders dann, wenn mit dem integrierten Dialogfeld der Benutzer zu einer Eingabe aufgefordert werden soll und die Einstellungen/Eingaben anschließend ausgewertet werden sollen.
Der Wert (Long), der von den Show- und Display-Methoden zurückgegeben wird, gibt an, auf welche Schaltfläche geklickt wurde, um das Dialogfeld zu schließen. Beim Dialog 'Speichern unter' zum Beispiel, entspricht -1 die Schaltfläche 'Speichern' und 0 die Schaltfläche 'Abbrechen'.
Auswerten der Display-Methode des Dialogs 'Speichern unter'
Wurde die Schaltfläche 'Speichern' geklickt, könnte der eingegebene Dateiname über die Name-Eigenschaft des Dialogs zurückgegeben werden. Allerdings ist es dem Anwender möglich, im Dialog im Feld 'Dateiname' den Pfad inkl. Dateiname einzugeben. Ist dies der Fall, so wird über die Name-Eigenschaft auch der Pfad inkl. Dateiname zurückgegeben! Den ausgewählten Pfad könnte man mit der CurDir-Funktion ermitteln, das ist aber unter bestimmten Umständen nicht unbedingt zuverlässig.
Wie man sieht, ist die Auswertung des Dialogs gar nicht so einfach.
Abhilfe schafft allerdings der "gute alte" WordBasic-Befehl FileNameInfo$, mit dem die entsprechenden Informationen bzgl. der Eingaben zurückgegeben werden können.
 
WordBasic.FileNameInfo$(Filename$, InfoType)
 
InfoType-Konstanten
  1 - Pfad inkl. Dateiname
  2 - Nur Pfad, wenn die Datei im aktuellen Ordner ist,
      sonst Pfad inkl. Dateiname
  3 - Nur Dateiname
  4 - Dateiname ohne Endung
  5 - Nur Pfad
  6 - UNC-Pfad
Anmerkung zu InfoType 4 - Dateiname ohne Endung
Bei der Verwendung des WordBasic-Befehls FileNameInfo$ in Verbindung mit InfoType 4, wird nur der Teil des Dateinamens zurückgegeben, der sich vor dem ersten vorkommenden Punkt befindet. Nachdem der Punkt zu einem beliebten (!?!) Zeichen in Dateinamen geworden ist, sollte man den Dateinamen ohne Endung vorsichtshalber mit VBA-Methoden ermitteln, ab Word 2000 z. B. mit der Funktion InStrRev.
Der Link zum Download der von Microsoft zur Verfügung gestellten Word 95-WordBasic-Hilfe (wrdbasic.exe) kann den Links zum Thema entnommen worden.
Word-Befehl DateiSpeichernUnter (FileSaveAs) ändern
Möchte man den Benutzer zwingen, ein Dokument in einem bestimmten Verzeichnis unter einem vorgegebenen Namen und Format zu speichern, könnte man den integrierten Word-Befehl DateiSpeichernUnter (FileSaveAs) entsprechend ändern.
In folgendem Beispiel wird das aktive Dokument nur dann mit der SaveAs-Methode im RTF-Format gespeichert, wenn der Dateiname ohne Endung nicht länger als 8 Zeichen ist.
 
Sub FileSaveAs()
  Dim strPath     As String
  Dim strFileName As String
  Dim lngFormat   As Long

  Dim lngRetVal   As Long
  Dim nPos        As Long

  On Error GoTo err_Handler

  strPath = "c:\temp"
  strFileName = "Datei_1"
  lngFormat = wdFormatRTF

  If Right$(strPath, 1) <> "\" Then
    strPath = strPath & Application.PathSeparator
  End If

  With Application.Dialogs(wdDialogFileSaveAs)
    .Name = strPath & strFileName
    .Format = lngFormat

    lngRetVal = .Display
    If lngRetVal = -1 Then
      strPath = WordBasic.FileNameInfo$(.Name, 5)
      strFileName = WordBasic.FileNameInfo$(.Name, 3)

      If InStr(1, strFileName, ".") > 0 Then
        #If VBA6 Then
           nPos = InStrRev(strFileName, ".")
        #Else
           nPos = InStrRevVB5(strFileName, ".")
        #End If
        strFileName = Left$(strFileName, nPos - 1)
      End If

      If Len(strFileName) > 8 Then
        MsgBox "Sorry... der Dateiname darf nicht " & _
               "länger als 8 Zeichen sein !", _
               vbOKOnly + vbInformation
        GoTo exit_Sub
      End If

      strFileName = strPath & strFileName
      ActiveDocument.SaveAs FileName:=strFileName, _
            FileFormat:=lngFormat
    Else
      MsgBox "Der Benutzer hat 'Abbrechen' geklickt !", _
             vbOKOnly + vbInformation
    End If
  End With

exit_Sub:
  On Error GoTo 0
  Exit Sub

err_Handler:
  MsgBox "Fehler #: " & Err.Number & vbCrLf & _
         Err.Description, vbOKOnly + vbCritical
  Resume exit_Sub
End Sub

Function InStrRevVB5(ByVal vsIn As String, _
      ByVal vsSep As String) As Long

  Dim nPos As Long
  For nPos = Len(vsIn) To 1 Step -1
    If Mid$(vsIn, nPos, Len(vsSep)) = vsSep Then
      InStrRevVB5 = nPos
      Exit Function
    End If
  Next
End Function
 
Dialog 'Speichern unter' zur Eingabe von Pfad und Dateiname anzeigen
Hier wird der Dialog 'Speichern unter' angezeigt, damit der Benutzer für die Ausgabe von Text in einer Text-Datei (*.txt) einen beliebigen Pfad und Dateinamen auswählen kann.
 
Sub GetFileNameForTXTFile()
  Dim strPath     As String
  Dim strFileName As String
  Dim strFileExt  As String
  Dim lngFormat   As Long

  Dim lngRetVal   As Long
  Dim nPos        As Long

  On Error GoTo err_Handler

  strPath = CurDir()
  strFileName = ""
  strFileExt = ".txt"
  lngFormat = wdFormatText

  If Right$(strPath, 1) <> "\" Then
    strPath = strPath & Application.PathSeparator
  End If

  With Application.Dialogs(wdDialogFileSaveAs)
    .Name = strPath & strFileName
    .Format = lngFormat

    lngRetVal = .Display

    If lngRetVal = -1 Then
      strPath = WordBasic.FileNameInfo$(.Name, 5)
      strFileName = WordBasic.FileNameInfo$(.Name, 3)

      If InStr(1, strFileName, ".") > 0 Then
        #If VBA6 Then
           nPos = InStrRev(strFileName, ".")
        #Else
           nPos = InStrRevVB5(strFileName, ".")
        #End If
        strFileName = Left$(strFileName, nPos - 1)
      End If
      strFileName = strPath & strFileName & strFileExt

      Dim FN As Integer

      FN = FreeFile()
      Open strFileName For Output As #FN
        Print #FN, "Hallihallo..."
      Close #FN

      MsgBox "Die Textdatei wurde erfolgreich erstellt!" & _
             vbCrLf & strFileName, vbOKOnly + vbInformation

    Else
      MsgBox "Der Benutzer hat 'Abbrechen' geklickt !", _
             vbOKOnly + vbInformation
    End If
  End With

exit_Sub:
  On Error GoTo 0
  Exit Sub

err_Handler:
  MsgBox "Fehler #: " & Err.Number & vbCrLf & _
         Err.Description, vbOKOnly + vbCritical
  Resume exit_Sub
End Sub
 
Links zum Thema
Download - Word 95 WordBasic Help File
Word-Befehle ändern
Hinweis
Die im Download befindlichen *.bas-Dateien können in Word im VB-Editor importiert werden.

Windows-Version
95
98/SE
ME
NT
2000
XP
Vista
Win 7
Word-Version
95
97
2000
2002 (XP)
2003
2007
2010


Download  (4,8 kB) Downloads bisher: [ 811 ]

Vorheriger Tipp Zum Seitenanfang Nächster Tipp

Startseite | Projekte | Tutorials | API-Referenz | VB-/VBA-Tipps | Komponenten | Bücherecke | VB/VBA-Forum | VB.Net-Forum | DirectX-Forum | Foren-Archiv | DirectX | VB.Net-Tipps | Chat | Spielplatz | Links | Suchen | Stichwortverzeichnis | Feedback | Impressum

Seite empfehlen Bug-Report
Letzte Aktualisierung: Montag, 25. Juli 2011