Tipp 0456 Dokument schreibgeschützt?
Autor/Einsender:
Datum:
  Angie
30.07.2005
Entwicklungsumgebung:   Word 2000
Bei der Automation von Word sollte man, wenn ein Dokument zur Bearbeitung geöffnet und überschrieben werden soll, vorher prüfen, ob das Dokument mit Schreibzugriff geöffnet werden kann. Mit der folgenden Funktion wird lediglich ermittelt, ob das angegebene Dokument "theoretisch" zur Bearbeitung geöffnet werden könnte. "Theoretisch" deswegen, da hier nur ermittelt wird, ob das Dokument im Explorer mit dem Attribut 'Schreibgeschützt' versehen ist und/oder ob das Dokument bereits in Bearbeitung ist. In der Funktion wird nicht geprüft, ob das Dokument mit einem Lese-/Schreibkennwort versehen ist!
Bei Verwendung der Documents.Open-Methode ohne vorherigem Aufruf der Funktion, würde bei einer im Explorer mit dem Attribut 'Schreibgeschützt' versehenen Dokument das Dokument schreibgeschützt geöffnet werden und nach der Bearbeitung der Dialog 'Speichern unter ...' angezeigt werden.
Ist das Dokument in einer anderen Word-Instanz geöffnet, würde der Word-Dialog angezeigt werden, in dem man auswählen kann, ob eine schreibgeschützte Kopie geöffnet oder ob man benachrichtigt werden soll, wenn das Dokument bearbeitet werden kann.
Die folgende Funktion gibt True zurück, wenn das angegebene Dokument im Explorer mit dem Attribut 'Schreibgeschützt' versehen ist und/oder das Dokument bereits in Bearbeitung ist, also nur zum Lesen (ReadOnly) geöffnet werden könnte, andernfalls False.
 
Function IsFileReadyOnly(ByVal strFileName As String, _
      ByRef strErrMsg As String) As Boolean

  If GetAttr(strFileName) And vbReadOnly Then
    strErrMsg = "Datei ist im Explorer schreibgeschützt."
    IsFileReadyOnly = True

  Else
    Dim FN As Integer

    On Error Resume Next
    FN = FreeFile()
    Open strFileName For Random Access Write Lock Read Write As #FN
    Close #FN

    If Err.Number <> 0 Then
      strErrMsg = Err.Description
      IsFileReadyOnly = True
    End If
    On Error GoTo 0
  End If
End Function
 
Beispiel-Aufrufe
In der folgenden Prozedur wird zur Demo lediglich ermittelt, ob sich das angegebene Dokument "theoretisch" öffnen ließe.
 
Sub Demo_Aufruf_1()
  Dim strFileName As String
  Dim strErrMsg   As String

  strFileName = "e:\temp\dok1.doc"

  If Len(Dir$(strFileName, vbNormal)) > 0 Then
    If Not IsFileReadyOnly(strFileName, strErrMsg) Then
      MsgBox "Das Dokument kann 'theoretisch' geöffnet werden!"
    Else
      MsgBox strErrMsg
    End If
  Else
    MsgBox "Das Dokument existiert nicht!"
  End If
End Sub
 
Ob sich ein Dokument tatsächlich öffnen lässt, kann man relativ einfach nach Aufruf der Documents.Open-Methode feststellen. Ist das Dokument mit einem Lese- und/oder Schreibkennwort versehen, würde jedoch bei folgendem Beispiel-Aufruf der Word-Dialog für die Passwort-Eingabe angezeigt werden, andernfalls das Dokument zur Bearbeitung geöffnet.
 
Sub Demo_Aufruf_2()
  Dim strFileName As String
  Dim strErrMsg   As String
  
  Dim objWDDoc    As Word.Document

  strFileName = "e:\temp\Dok1.doc"

  If Len(Dir$(strFileName, vbNormal)) > 0 Then
    If Not IsFileReadyOnly(strFileName, strErrMsg) Then
      MsgBox "Das Dokument kann 'theoretisch' geöffnet werden!"

      On Error Resume Next
      Set objWDDoc = Application.Documents.Open(strFileName)
      If Err.Number = 0 Then
        MsgBox "Das Dokument kann 'tatsächlich' geöffnet werden!"

        '- Code für die Bearbeitung des Dokuments -

        Set objWDDoc = Nothing
      Else
        MsgBox "Das Dokument konnte  n i c ht  geöffnet werden!"
      End If
      On Error GoTo 0
    Else
      MsgBox strErrMsg
    End If
  Else
    MsgBox "Das Dokument existiert nicht!"
  End If
End Sub
 
Um zu verhindern, dass der Word-Dialog für die Kennwort-Eingabe angezeigt wird, kann entweder ein gültiges Lese-/ und Schreibkennwort angegeben werden, oder aber auch ein "Dummy"-Kennwort. Werden gültige Kennwörter angegeben, wird das Dokument zur Bearbeitung geöffnet, andernfalls nicht.
 
Sub Demo_Aufruf_3()
  Dim strFileName As String
  Dim strErrMsg   As String

  Dim objWDDoc    As Word.Document

  Dim strDocPWD       As String
  Dim strDocWritePWD  As String

  strFileName = "e:\temp\Dok1.doc"

  strDocPWD = "lesen"
  strDocWritePWD = "schreiben"

  If Len(Dir$(strFileName, vbNormal)) > 0 Then
    If Not IsFileReadyOnly(strFileName, strErrMsg) Then
      MsgBox "Das Dokument kann 'theoretisch' geöffnet werden!"

      On Error Resume Next
      Set objWDDoc = Application.Documents.Open( _
            FileName:=strFileName, ReadOnly:=False, _
            PasswordDocument:=strDocPWD, _
            WritePasswordDocument:=strDocWritePWD)

      If Err.Number = 0 Then
        MsgBox "Das Dokument kann 'tatsächlich' geöffnet werden!"

        '- Code für die Bearbeitung des Dokuments -

        Set objWDDoc = Nothing
      Else
        MsgBox "Das Dokument konnte  n i c ht  geöffnet werden!"
      End If
      On Error GoTo 0
    Else
      MsgBox strErrMsg
    End If
  Else
    MsgBox "Das Dokument existiert nicht!"
  End If
End Sub
 
Hinweis
Die im Download befindliche *.bas-Datei kann in Word im VB-Editor importiert werden.
Weitere Links zum Thema
Dokumente bearbeiten
Dokumente konvertieren

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


Download  (2,3 kB) Downloads bisher: [ 430 ]

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: Samstag, 30. Juli 2011