Discussion:
Aus einer VB6-Anwendung Text einfügen
(zu alt für eine Antwort)
Lothar Geyer
2013-03-08 08:25:27 UTC
Permalink
Ich habe eine Tabelle, in der in einer Zeile in mehreren Spalten
Bookmarks enthalten sind. Welche Bookmarks in welcher Spalte sind und
die Reihenfolge der Bookmarks in einer Spalte ist nicht bekannt (kann
vom Kunden selbst angepasst werden). Ich möchte nun in der Spalte, in
der ein bestimmter Bookmark existiert, am Anfang einen Text einfügen.

Wie mache ich das?

Danke schon im voraus.

Lothar Geyer
Bernhard Sander
2013-03-08 12:22:30 UTC
Permalink
Hallo Lothar,
Ich habe eine Tabelle, in der in einer Zeile in mehreren Spalten Bookmarks
enthalten sind. Welche Bookmarks in welcher Spalte sind und die Reihenfolge der
Bookmarks in einer Spalte ist nicht bekannt (kann vom Kunden selbst angepasst
werden). Ich möchte nun in der Spalte, in der ein bestimmter Bookmark existiert,
am Anfang einen Text einfügen.
Wie mache ich das?
Wie Du von VB6 aus Word ansprichst, nehme ich an weißt Du.

In VBA würde es so klappen, solange die Textmarke innerhalb einer Zelle liegt.
Lästiger Nebeneffekt: falls die Textmarke in der Kopfzelle steht, kann es
vorkommen, dass durch das Einfügen von Text die Textmarke verschwindet. In
diesem Fall wird die Textmarke wieder restauriert.

Textmarke = "tm"
If ActiveDocument.Bookmarks.Exists(Textmarke) Then
Set Bereich = ActiveDocument.Bookmarks(Textmarke).Range
If Bereich.Information(wdWithInTable) Then
Bereich.Columns(1).Cells(1).Range.Text = "Spaltenüberschrift"
If Not ActiveDocument.Bookmarks.Exists(Textmarke) Then
bereich.Bookmarks.Add (Textmarke)
End If
End If
End If

Wenn die Textmarken sich über mehrere Zeilen oder Spalten erstrecken, wird es
komplizierter. Das sollte man zur eigenen Übersicht besser nicht tun.

Viele Grüße

Bernhard Sander
Lothar Geyer
2013-03-08 18:06:54 UTC
Permalink
Hallo Bernhard,
...
Ich habe eine Tabelle, in der in einer Zeile in mehreren Spalten Bookmarks
enthalten sind. Welche Bookmarks in welcher Spalte sind und die Reihenfolge der
Bookmarks in einer Spalte ist nicht bekannt (kann vom Kunden selbst angepasst
werden). Ich möchte nun in der Spalte, in der ein bestimmter Bookmark existiert,
am Anfang einen Text einfügen.
...
ich habe mich da wahrscheinlich falsch ausgedrückt. Mit Deiner Anregung
habe ich etwas probiert, das aber nicht hinhaut (RowIndex zeigt auf die
aktuelle Tabellen-Zeile, und das ist die einzige, in der die Textmarke
vorkommen kann):

Private PosTable As Word.Table
Const TmName As String = "KurzText"

With PosTable.Rows(RowIndex)
For ii = 1 To .Cells.Count
If .Cells(ii).Range.Bookmarks.Exists(TmName) Then
.Cells(ii).Range = IntroText & .Cells(ii).Range
End If
Next ii
End With

Ich habe also mehrere Spalten, weiß aber nicht, in welcher Spalte die
Textmarke vorkommt. Wenn ich das weiß, soll vor dem Inhalt der Zelle ein
Text eingefügt werden. In der Zelle können weitere Textmarken vorkommen.
Alle müssen erhalten bleiben, da sie danach durch entsprechende Texte
ersetzt werden.

Mit meinem Kode ist ...Bookmarks.Exists(TmName) immer True, unabhängig
von der Variablen ii. Warum?

Lothar Geyer
Lothar Geyer
2013-03-09 07:19:50 UTC
Permalink
Ich habe nun eine Lösung selbst gefunden:

TmName = "KURZTEXT"
If myDocument.Bookmarks.Exists(TmName) Then
' optionale / alternative position?
If Len(IntroText) > 0 Then
ii =
myDocument.Bookmarks(TmName).Range.Information(wdStartOfRangeColumnNumber)
IfTextOffice_InsertFreieMarke TmName, Kurztext
tPos = PosTable.Cell(RowIndex, ii).Range.Start
myDocument.Characters(tPos).InsertBefore IntroText & vbCr
Else
IfTextOffice_InsertFreieMarke TmName, Kurztext
End If
End If

Ich habe aber noch einen Zusatzwunsch: der eingefügte Text (IntroText)
soll fett geschrieben werden. Wie kann ich diesen Text selektieren und
dann Fettschrift festlegen oder z.B. auch Kursiv-Schrift?

Lothar Geyer
Rainer H. Rauschenberg
2013-03-09 10:17:22 UTC
Permalink
Post by Lothar Geyer
myDocument.Characters(tPos).InsertBefore IntroText & vbCr
Ich habe aber noch einen Zusatzwunsch: der eingefügte Text (IntroText)
soll fett geschrieben werden. Wie kann ich diesen Text selektieren und
dann Fettschrift festlegen oder z.B. auch Kursiv-Schrift?
Der übliche Weg wäre eine Variable vom Typ Range zu definieren, dieser
Variable den gefundenen Range zuzuweisen. Damit hat man dann Zugriff auf
den Bereich mit dem eingefügten Text.

Also oben

Dim myrange as Range

und statt der ziteierten Zeile

set myrange=myDocument.Characters(tPos).duplicate
myrange.text=IntroText & vbCr
myrange.font.bold=true

Rainer "nicht ausprobiert" Rauschenberg
Lothar Geyer
2013-03-09 12:50:34 UTC
Permalink
Vielen Dank Rainer.
Post by Rainer H. Rauschenberg
set myrange=myDocument.Characters(tPos).duplicate
myrange.text=IntroText & vbCr
myrange.font.bold=true
Ich musste noch eine kleine Änderung vornehmen, da der eingefügte Text
ja am Anfang der Zelle steht:

IfTextOffice_InsertFreieMarke TMname, Kurztext
tPos = PosTable.Cell(RowIndex, ii).Range.Start
myDocument.Characters(tPos).InsertBefore "X"
Set oIntroRng = myDocument.Characters(tPos).Duplicate
oIntroRng.Text = IntroText & vbCr
oIntroRng.Font.Bold = True
oIntroRng.Font.Italic = True

Etwas kürzer ginge es noch mit

IfTextOffice_InsertFreieMarke TMname, "X" & Kurztext
tPos = PosTable.Cell(RowIndex, ii).Range.Start
Set oIntroRng = myDocument.Characters(tPos).Duplicate
...

Aber das Ergebnis schaut jetzt so aus, wie ich es wollte.

Lothar Geyer

Loading...