Aktuelle Seite:
/vba/vbaNoExt.htm
Letzte Änderung: 12.03.2009

Getestet unter Word2000Getestet unter WordXPGetestet unter Word2003Getestet unter Word2007  
Beispiel anzeigen
Makro/Datei speichern
Print

Über die Feldfunktion { Filename } lässt sich der Dateiname des aktuellen Dokumentes an beliebiger Stelle im Dokument anzeigen. Sobald die Datei gespeichert ist,wird, je nach Einstellung in Windows, dabei entweder die Dateiendung ".doc" mit angezeigt oder nicht. Möchte man auf keinen Fall die Endung im Dokument angezeigt bekommen, kann man leider nicht auf eine Word-interne Funktion zurückgreifen, sondern kann sich eine entsprechende Funktion per VBA basteln.

In diesem Beispiel wird dazu eine Dokumenteigenschaft (Datei/Eigenschaft/Anpassen) verwendet, in der der gekürzte Dateiname eingetragen wird. So steht diese Informationen anschließend über die Feldfunktion { DOCPROPERTY <Eigenschaft> } im Dokument zur Verfügung.

Die Funktion Function fkt_NoExt(oDoc As Document) bekommt als Parameter das Dokument übergeben und prüft, ob der Dateiname auf .doc endet. In diesem Fall wird der Dateiname um die letzten 4 Zeichen gekürzt. Anschließend wird das Dokument dahingehend überprüft, ob es die Dateieigenschaft Dateiname besitzt. Ist die Eigenschaft noch nicht vorhanden wird sie im Dokument erstellt und mit dem gekürzten Dateinamen gefüllt.

Code markieren
Function fkt_NoExt(oDoc As Document)  
Dim oProp As DocumentProperty
Dim sFileName As String
Const sProp As String = "Dateiname"
If Right(oDoc.Name, 4) = ".doc" Then
  sFileName = Left(oDoc.Name, Len(oDoc.Name) - 4)
End If
On Error Resume Next
  Set oProp = oDoc.CustomDocumentProperties(sProp)
  If oProp Is Nothing Then
    Set oProp = oDoc.CustomDocumentProperties.Add( _
      Name:=sProp, _
      LinkToContent:=False, _
      Type:=msoPropertyTypeString, _
      Value:=oDoc.Name)
  End If
  oProp.Value = sFileName
On Error GoTo 0
End Function  

Damit beim Speichern der Datei auch der gekürzte Dateiname mitgeändert wird, muss sich die dazu verwendete VBA-Funktion auch in die Speicherroutinen (Datei/Speichern und Datei/Speichern unter) von Word einklinken. Dies erfolgt, indem die entsprechenden Befehle abgefangen und nachprogrammiert werden.

Code markieren
Sub FileSave()  
ActiveDocument.Save
fkt_NoExt ActiveDocument
End Sub  
Sub FileSaveAs() With Dialogs(wdDialogFileSaveAs) If .Show = -1 Then fkt_NoExt ActiveDocument End If End With End Sub

Wird der Code in einer Dokumentvorlage gespeichert, kann die Dateieigenschaft über nachstehendes Makro bereits beim Erstellen neuer Dokumente erstellt und gefüllt werden.

Code markieren
Sub AutoNew()  
fkt_NoExt ActiveDocument
End Sub 

 www.chf-online.de/vba/vbaNoExt.htm © 2001-11 Christian Freßdorf (Zaphod-Systems)