|
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
|
|
|
|
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
|
|
|
|
Die im Download befindliche *.bas-Datei kann in Word im VB-Editor importiert werden.
|
|
|
|
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: [ 441 ]
|
|
|