PDA

Vollständige Version anzeigen : Geschütztes Leerzeichen geht bei Feldaktualisierung verloren


C-J
24.08.2009, 10:47
Hallo zusammen,
Word macht es einem bei der Arbeit schwer, wo es nur kann :D ...

Ich habe in meinem Dokument Querverweise (REF), die mit VBA gesetzt werden.
Im VBA Code ist mit dem Schalter "\* CHARFORMAT" bereits geregelt, dass bei einer Feldaktualisierung, die Formatierung vom Feld erhalten bleibt.

Die Verweise sehen beispielsweise so aus:
(Bild 1)

Damit es keine unliebsamen Zeilenumbrüche im Verweis gibt, wird auch per VBA das Leerzeichen hinter 'Bild' durch ein geschütztes Leerzeichen getauscht.

Jedoch wird dieses geschützte Leerzeichen bei einer Feldaktualisierung wieder durch ein normales Leerzeichen ersetzt. Typisch Word! :mad:

Meine Frage:
Kann man Word nicht generell verbieten in den Feldern rumzufummeln? Is ja echt furchtbar .. egal was man macht, das Programm macht einem einen Strich durch die Rechnung!

Bin für alle Antworten dankbar :)

Gruß,
CJ

PapaSchlumpf
24.08.2009, 10:50
also das Word die Formatierung (z.B. Größe) des geschützten Leerzeichens ignoriert, kenn ich ja, aber dass dies durch ein normales ersetzt wird, ist mir neu.

Wie erstellst du das gesch. Leerzeichen denn? Chr(0162)?

Gruß
Christian

PapaSchlumpf
24.08.2009, 11:37
Nachtrag:
du sperrst ein Feld über
ActiveDocument.Fields(1).Locked = True

(Strg+F11)


dann wird weder Inhalt noch sonst etwas daran geändert (auch beim Felder aktualieren nicht).

2cents
Christian

C-J
24.08.2009, 12:26
Hi Christian :)

Also, hier mal der Codeauasschnitt, wo der Verweis gesetzt wird .. kennste ja größtenteils, weils Dein Code ist :D .. habe ihn halt angepasst.
With Selection
.Collapse Direction:=wdCollapseEnd
.TypeText " "
.MoveLeft Unit:=wdCharacter, count:=1, Extend:=wdMove
'Textmarke zum Formatieren setzen
ActiveDocument.Bookmarks.Add "_QVerw", Selection
Set rng = ActiveDocument.Bookmarks("_QVerw").Range
.TypeText Text:="("
' Querverweis einfügen
.InsertCrossReference ReferenceType:=Me.cboRefType.List(Me.cboRefType.ListIndex), _
ReferenceKind:=Val(Me.cboRefKind.List(Me.cboRefKind.ListIndex, 2)), ReferenceItem:=Me.lstRef.ListIndex + 1
.TypeText Text:=")"
'Textmarke zum Springen setzen
ActiveDocument.Bookmarks.Add "_QVerw2", Selection
.Collapse Direction:=wdCollapseEnd
' geschütztes Leerzeichen einsetzen
Selection.GoTo What:=wdGoToBookmark, Name:="_QVerw"
Selection.MoveRight Unit:=wdCharacter, count:=1
Selection.MoveRight Unit:=wdWord, count:=1
Selection.TypeBackspace
Selection.TypeText Text:=ChrW(160)
Selection.GoTo What:=wdGoToBookmark, Name:="_QVerw2"
' Textmarkenende definieren
rng.End = Selection.Start
' Feldcode um die Option "CHARFORMAT erweitern"
Set fldRef = rng.Fields(1)
fldRef.Code.Text = fldRef.Code.Text & " \* CHARFORMAT "
Set fldRef = Nothing
'
' hier die Formatvorlagen für die Textmarke definieren
Select Case Me.cboRefType.List(Me.cboRefType.ListIndex)
Case "Überschrift"
rng.Style = ActiveDocument.Styles(wdStyleNormal)
Case "Bild"
rng.Style = ActiveDocument.Styles("Bild_Verweis")
Case "Formel"
rng.Style = ActiveDocument.Styles("Formel_Verweis")
Case "Tabelle"
rng.Style = ActiveDocument.Styles("Tabellen_Verweis")
Case Else
rng.Style = ActiveDocument.Styles("Beschriftung")
End Select
If ActiveDocument.Bookmarks.Exists("_QVerw") Then
ActiveDocument.Bookmarks("_QVerw").Delete
End If
If ActiveDocument.Bookmarks.Exists("_QVerw2") Then
ActiveDocument.Bookmarks("_QVerw2").Delete
End If
Set rng = Nothing
Selection.MoveRight Unit:=wdCharacter, count:=1, Extend:=wdExtend
'.MoveRight unit:=wdCharacter, count:=1, Extend:=wdMove
Set rng = Selection.Range
rng.End = rng.End + 1
If rng.Text = " " + Chr(13) Then
rng.End = rng.End - 1
rng.Delete
rng.Delete
'rng.Collapse wdCollapseEnd
Selection.Font.Reset
ElseIf rng.Text = " ." Then
rng.End = rng.End - 1
rng.Delete
Selection.Font.Reset
Else
rng.Delete
rng.Collapse wdCollapseEnd
Selection.Font.Reset
End If

End With


Alles was rot ist habe ich hinzugefügt, oder geändert. Ich habe Chr160 genommen, so war es im Internet zu finden :)

Wie man sieht, veranlasst der Code Word dazu, wild durch die Gegend zu springen, aber anders habe ich es nicht hinbekommen .. insbesondere der Teil am Ende, wo dafür gesorgt wird, dass nach dem Einfügen vom Verweis, das Format wieder auf Absatzformatierung zurückschaltet .. das klappt auch alles sehr gut und darf NICHT mehr geändert werden, auch wenn da z.B. zwei mal 'rng.delete' steht!
Nur beim Aktualisieren geht das gesch. Leerzeichen wieder verloren :(

Wenn ich alle Felder sperre, kann ich sie auch nicht mehr aktualisieren, oder? .. vor allem, wo würde ich denn diese Codezeile im Projekt unterbringen?

Gruß,
Christoph

PapaSchlumpf
24.08.2009, 15:02
muss ich mir in einer ruhigen Minute mal anschauen.
UNter Word2000 habe ich mit den gesch. Leerzeichen keine Probleme.

Gruß
Christian

C-J
24.08.2009, 15:31
OK, thx :)

PapaSchlumpf
24.08.2009, 15:38
ok,
du musst latürnich beim Einfügen der Beschriftung (nicht Querverweis) das gesch. Leerzeichen einfügen.

UNd das machst du direkt in der Constanten:
Const conBild1 = "Bild*"
Das Leerzeichen fügst du per ALT+0160 ein.


Gruß
Christian

C-J
24.08.2009, 15:55
Die ersten Versuche liefen ins Leere .. ich meld mich Morgen noch mal, muss das erst mal genauer unter die Lupe nehmen ..

LG,
CJ

C-J
25.08.2009, 07:06
Guten Morgen Christian :)

Bis ich mal geschnallt habe, dass ich erst mal ganz neu für ein Bild eine BILDUNTERSCHRIFT mit der anderen Funktion setzen muss, damit ich dann im VERWEIS auch sehe, dass es nun tatsächlich ein geschütztes Leerzeichen ist ... na ja

Jetzt ist das schon mal absolut perfekt! Ohne Wenn und Aber, he he :grins: Also, mit dem Thema Verweise hast Du mir echt super weitergeholfen.

Mann müsste eigentlich mal so ne kleine Sammlung zusammentragen, allein ich habe bestimmt schon 5 bis 6 echt supergute Sachen von dir bekommen und ich lese hier des Öfteren, dass andere User fast das selbe Problem haben, aber anscheinend nicht Deine Lösungen für ihr Problem im Forum auffinden können .. Das ist ein bisschen schade ... aber da kann man als einfacher User keinen Einfluss drauf nehmen .. viele wissen wahrscheinlich einfach nicht wonach sie suchen sollen .. also ist es meiner Meinung nach Aufgabe des Admin, hier mal etwas spezifischere Bereiche in den Archiven oder sonst wo zu schaffen.

LG,
CJ