Ich habe eine Lösung für mein Problem mit der Variable gefunden.
Option Explicit
Sub clearVariable()
Dim oVar As Variable
Dim bVar As Boolean
For Each oVar In ActiveDocument.Variables
If oVar.Name = "varID" Then
bVar = True
oVar.Delete
MsgBox "Variable Deleted"
Exit For
End If
Next oVar
If Not bVar Then MsgBox "Variable not found"
lbl_Exit:
Set oVar = Nothing
Exit Sub
End Sub
Wahrscheinlich is das mit dem zweiten If statement völlig der falsche Ansatz. Wäre schön wenn du dir das mal anschauen könntest.
Gruß
Manuel
Den Code habe ich in ein Modul geschrieben. Jetzt kann ich dieses Makro immer ausführen wenn ich die Variable entfernen möchte.
Allerdings bin ich was den case select angeht noch auf ein weiteres Problem gestoßen bei dem du mir eventuell behilflich sein könntest.
Das Dokument erstellt die Variable ja immer und speichert ohne zu Fragen wenn die variable nicht vorhanden ist. Da es jedoch sein kann, das Daten die sich für jedes zu erstellende Protokoll ständig wiederholen, einmal vorgeschrieben werden und das Protokoll dann gespeichert wird. Müsste ansich eine zweite Abfrage her die erkennt das die variable nicht vorhanden ist und dann den Benutzer frägt ob das Dokument die Daten übertragen oder ob ohne Datenübertragung gespeichert werden soll.
Ich habe etwas an dem vorhanden Code rumgedoktert (im Prinzip nur ein weiteres If Statement hinzugefügt), bin aber nicht weitergekommen.
Sub FileSave()
Dim oDoc As Document
Dim oVar As Variable
Dim bVar As Boolean
Dim lngID As Long
Dim lngAsk As Long
Dim vbCancel As Boolean, vbNo As Boolean, vbYes As Boolean
Set oDoc = ActiveDocument
If Checkfields = True Then
If oDoc.Path = "" Then
FileSaveAs
End If
For Each oVar In oDoc.Variables
If oVar.Name = "varID" Then
lngAsk = MsgBox("Die Daten dieses Protokolls wurden bereits in die Geräteliste übertragen." & vbCr & _
"Wurden Daten im Protokoll geändert, kann der Eintrag in der Geräteliste aktualisiert werden!" & vbCr & _
vbCr & _
"• Wähle 'Ja' um den vorhandenen Eintrag zu aktualisieren!" & vbCr & _
"• Wähle 'Nein' um das Dokument ohne Datenübertragung zu speichern!" & vbCr & _
"• Wähle 'Abbrechen' um den Vorgang zu beenden!", vbYesNoCancel)
Select Case lngAsk
Case 6 'vbYes
MsgBox ("Die Daten werden jetzt überschrieben und das Dokument gespeichert!")
lngID = oVar.Value
bVar = True
Exit For
Case 7 'vbNo
MsgBox ("Das Dokument wird ohne Datenübertragung gespeichert!")
bVar = False
Exit For
Case 2 'vbCancel
MsgBox ("Speichervorgang wird abgebrochen!")
GoTo lbl_Exit
Case Else
MsgBox "Es ist etwas schief gelaufen!"
GoTo lbl_Exit
End Select
End If
If oVar.Name = "" Then ' Ich habe hier lediglich ein zweites If Statement eingebaut aber das funktioniert leider nicht.
lngAsk = MsgBox("Die Daten dieses Protokolls wurden noch nicht in die Geräteliste übertragen!" & vbCr & _
"Es besteht die Möglichkeit dies zu tun oder das Dokument ohne Datenübertragung zu speichern." & vbCr & _
vbCr & _
"• Wähle 'Ja' um die Daten in die Geräteliste zu übertragen!" & vbCr & _
"• Wähle 'Nein' um das Dokument ohne Datenübertragung zu speichern!" & vbCr & _
"• Wähle 'Abbrechen' um den Vorgang zu beenden!", vbYesNoCancel)
Select Case lngAsk
Case 6 'vbYes
MsgBox ("Die Daten werden jetzt überschrieben und das Dokument gespeichert!")
lngID = oVar.Value
bVar = True
Exit For
Case 7 'vbNo
MsgBox ("Das Dokument wird ohne Datenübertragung gespeichert!")
bVar = False
Exit For
Case 2 'vbCancel
MsgBox ("Speichervorgang wird abgebrochen!")
GoTo lbl_Exit
Case Else
MsgBox "Es ist etwas schief gelaufen!"
GoTo lbl_Exit
End Select
End If
Next oVar
If Not bVar Then
oDoc.Variables("varID").Value = "0"
oDoc.Save
Else
'nur speichern
DataTransfer CStr(lngID)
End If
If Not oDoc.Saved Then oDoc.Save
End If
lbl_Exit:
Exit Sub
End Sub
|