Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

Word 2002: Document.Variables

14 views
Skip to first unread message

Hapla

unread,
Feb 24, 2012, 10:29:29 AM2/24/12
to
Hallo zusammen,

ich hätte da mal ein paar Fragen zu DocumentVariablen.

Aus der VBA-Hilfe habe ich mittlerweile herausgefunden, wie ich die
anlegen und auslesen kann, aber mehr leider nicht. Wie ist das
eigentlich, kann ich die nur anlegen oder kann ich die auch wieder
löschen oder reicht es, wenn ich denen dann einfach den Wert "" zuweise.

Das Problem ist nämlich, beim zweiten Aufruf des Dokuments bekomme ich
eine Fehlermeldung "Variable existiert schon".

MfG Hapla

--
MS- Windows XP / MS-Office XP

Winfried Sonntag

unread,
Feb 26, 2012, 4:26:38 PM2/26/12
to
Am 24.02.2012 schrieb Hapla:

> Aus der VBA-Hilfe habe ich mittlerweile herausgefunden, wie ich die
> anlegen und auslesen kann, aber mehr leider nicht. Wie ist das
> eigentlich, kann ich die nur anlegen oder kann ich die auch wieder
> löschen oder reicht es, wenn ich denen dann einfach den Wert "" zuweise.
>
> Das Problem ist nämlich, beim zweiten Aufruf des Dokuments bekomme ich
> eine Fehlermeldung "Variable existiert schon".

Zeig doch den entsprechenden Code, dann kann man dir helfen.

Servus
Winfried
--
Connect2WSUS: http://www.grurili.de/tools/Connect2WSUS.exe
GPO's: http://www.gruppenrichtlinien.de
Community Forums NNTP Bridge: http://communitybridge.codeplex.com/

Bernhard Sander

unread,
Feb 27, 2012, 5:36:45 AM2/27/12
to
Hallo Hapla,

> ich hätte da mal ein paar Fragen zu DocumentVariablen.
>
> Aus der VBA-Hilfe habe ich mittlerweile herausgefunden, wie ich die anlegen und
> auslesen kann, aber mehr leider nicht. Wie ist das eigentlich, kann ich die nur
> anlegen oder kann ich die auch wieder löschen oder reicht es, wenn ich denen
> dann einfach den Wert "" zuweise.
>
> Das Problem ist nämlich, beim zweiten Aufruf des Dokuments bekomme ich eine
> Fehlermeldung "Variable existiert schon".

Dann verwendest Du höchstwahrscheinlich die Methode .Add. Die liefert nämlich
diesen Fehler.

Aber lies noch ein bisschen weiter in der Hilfe.
Neben dem .Variables Objekt gibt es noch das .Variable Objekt (ohne 's' am
Ende). Dieses Objekt kennt eine Methode .Delete und eine Eigenschaft .Value.
.Delete sollte klar sein. Über die Eigenschaft .Value kannst Du einen neuen Wert
setzen.

Das Problem: wie kann man rausfinden muss, ob eine Variable schon existiert.
Leider kennt das .Variables-Objekt keine Methode .Exists (wie z.B. .Bookmarks).
Hier hilft eine Schleife über alle vorhandenen Variablen:

VarGibts = False
For Each Var in ActiveDocuments.Variables
If Var.Name = "gesuchterName" Then
VarGibts = True
Exit For
End If
Next

If VarGibts Then
ActiveDocuments.Variables("gesuchterName").Value = "Neuer Wert"
Else
ActiveDocuments.Variables.Add "gesuchterName", "Neuer Wert"
End If

' Bzw:
IF VarGibts Then
ActiveDocument.Variables("gesuchterName").Delete
End If

Gruß
Bernhard Sander

Rainer H. Rauschenberg

unread,
Feb 28, 2012, 9:39:21 AM2/28/12
to
On 2012-02-27, Bernhard Sander <off...@kein.spam> wrote:

> If VarGibts Then

Ich hab das für das vergleichbare Problem mit den Dokumenteigenschaften
so geloest:

Function customdocpropertyexists(name As String) As Boolean
Dim cdp As DocumentProperty
customdocpropertyexists = False
For Each cdp In ActiveDocument.CustomDocumentProperties
If cdp.name = name Then
customdocpropertyexists = True
Exit Function
End If
Next cdp
End Function
Function customdocpropertyget(name As String) As Variant
Dim cdp As DocumentProperty
For Each cdp In ActiveDocument.CustomDocumentProperties
If cdp.name = name Then
customdocpropertyget = cdp.value
Exit Function
End If
Next cdp
End Function
Sub customdocpropertyset(name As String, value As Variant)
Dim cdp As DocumentProperty
For Each cdp In ActiveDocument.CustomDocumentProperties
If cdp.name = name Then
cdp.value = value
Exit Sub
End If
Next cdp
Select Case TypeName(value)
Case "Byte", "Integer", "Long"
ActiveDocument.CustomDocumentProperties.Add name:=name, _
LinkToContent:=False, value:=value, _
Type:=msoPropertyTypeNumber
Case "Single", "Double", "Currency", "Decimal"
ActiveDocument.CustomDocumentProperties.Add name:=name, _
LinkToContent:=False, value:=value, _
Type:=msoPropertyTypeFloat
Case "Date"
ActiveDocument.CustomDocumentProperties.Add name:=name, _
LinkToContent:=False, value:=value, _
Type:=msoPropertyTypeDate
Case "String"
ActiveDocument.CustomDocumentProperties.Add name:=name, _
LinkToContent:=False, value:=value, _
Type:=msoPropertyTypeString
Case "Boolean"
ActiveDocument.CustomDocumentProperties.Add name:=name, _
LinkToContent:=False, value:=value, _
Type:=msoPropertyTypeBoolean
End Select
End Sub
Sub customdocpropertydelete(name As String)
Dim cdp As DocumentProperty
For Each cdp In ActiveDocument.CustomDocumentProperties
If cdp.name = name Then
cdp.Delete
Exit Sub
End If
Next cdp
End Sub

Einmal angelegt, beliebig nutzbar.

Hapla

unread,
Mar 1, 2012, 6:29:25 PM3/1/12
to
Hallo Bernhard,

Ich war ein paar Tage offline, darum erst jetzt meine Reaktion.

> Dann verwendest Du höchstwahrscheinlich die Methode .Add. Die liefert
> nämlich diesen Fehler.

Genau, die ist es.

> Aber lies noch ein bisschen weiter in der Hilfe.
> Neben dem .Variables Objekt gibt es noch das .Variable Objekt (ohne
> 's' am Ende). Dieses Objekt kennt eine Methode .Delete und eine
> Eigenschaft .Value.
> .Delete sollte klar sein. Über die Eigenschaft .Value kannst Du einen
> neuen Wert setzen.

Danke, durch einen Beitrag im Office-Forum
(http://www.ms-office-forum.net) bin ich auch schon auf diese Geschichte
gestoßen. :-)

> Das Problem: wie kann man rausfinden muss, ob eine Variable schon
> existiert. Leider kennt das .Variables-Objekt keine Methode .Exists
> (wie z.B. .Bookmarks). Hier hilft eine Schleife über alle vorhandenen
> Variablen:

Genau, habe mal Deinen Code-Schnipsel ausgetestet und jetzt klappt's.
Vielen Dank!

MfG Hapla

--
MS- Windows XP SP3 / MS-Office XP

Hapla

unread,
Mar 1, 2012, 6:41:34 PM3/1/12
to
Hallo Rainer ,

Ich war ein paar Tage offline, daher erst jetzt meine Antwort.

> Ich hab das fr das vergleichbare Problem mit den Dokumenteigenschaften
> so geloest:

Danke auch Dir für den Code-Schnipsel, den teste ich auch mal. Mal
schauen, mit welchem ich dann besser klar komme, Deiner oder der von
Bernhard.

> Einmal angelegt, beliebig nutzbar.

Yep, so habe ich es auch vor, wenn es dann funktioniert, kann man sich
anderen Baustellen zuwenden. ;-)

MfG Hapla

--
MS- Windows XP SP3 / MS-Office XP

0 new messages