ich habe folgende Schwierigkeit, mit VBA soll überprüft werden, ob eine
bestimmte Textmarke leer ist. Wenn das der Fall ist, soll die gesamte Zeile
nach Rückfrage gelöscht werden. wie bekommt man das hin?
Ich arbeite mit Word 2000 sp3. Vielen herzlichen Dank im Voraus.
Gruß
Thomas
glaube fast, dass ist eine falsche Frage, leider. ;-)
Es gibt zwei Arten von Textmarken:
Exklusive, sehen aus wie |
und
inklusive, sehen aus wie [Textmarkentext].
Dummerweise sind exklusive immer leer,
und inklusive niemals leer.
Wenn man sie leert,verschwinden Sie.
Wenn man davon absieht,
dass sie natürlich nur Leerzeichen enthalten könnten.
Sub TestBookmarks()
With Selection
.HomeKey Unit:=wdStory
.Collapse
.Bookmarks.Add "Inclusive", Range:=Selection.Range
With ActiveDocument
.Bookmarks("inclusive").Range.Text = "xxxxxxxxxx"
MsgBox .Bookmarks("inclusive").Range.Text ' nichts
End With
.MoveRight Unit:=wdCharacter, Count:=10, Extend:=wdExtend
.Bookmarks.Add "Exclusive", Range:=Selection.Range
With ActiveDocument
MsgBox .Bookmarks("Exclusive").Range.Text ' xxxxxxxxxx
.Bookmarks("Exclusive").Range.Text = ""
MsgBox .Bookmarks("Exclusive").Range.Text ' error 5941
' Textmarke "Exclusive" gint's nicht mehr
End With
End With
Tja...
Gruß
Helmut Weber, MVP WordVBA
"red.sys" & chr$(64) & "t-online.de"
Win XP, Office 2003
vielen Dank für die Hilfe aber das verstehe ich nicht.
Ich habe meine Adressen in Excel gesammelt und auch eine Spalte Kontaktpers.
eingerichtet. Ich wähle die jeweilige Adressen über ein Üserform aus. Der
Inhalt der Spalte Konkaktpers. wird an die entsprechende Textmarke
übergeben. Da aber nicht immer eine Kontaktperson vorhanden ist, bleibt an
der Stelle eine Leerzeile. Ich möchte nun per VBA überprüfen, ob die
Textmarke Kontaktpers. "leer" ist oder nicht. Wenn keine Kontaktperson
eingetragen ist, soll die Leerzeile automatisch entfernt werden. Das muß
oder gehen oder nicht?
Gruß
Thomas
"Helmut Weber" <red...@t-online.de> schrieb im Newsbeitrag
news:ko7pf1935pvfomed0...@4ax.com...
>vielen Dank für die Hilfe aber das verstehe ich nicht.
>Ich habe meine Adressen in Excel gesammelt und auch eine Spalte Kontaktpers.
>eingerichtet. Ich wähle die jeweilige Adressen über ein Üserform aus. Der
>Inhalt der Spalte Konkaktpers. wird an die entsprechende Textmarke
>übergeben. Da aber nicht immer eine Kontaktperson vorhanden ist, bleibt an
>der Stelle eine Leerzeile.
Soweit, so gut.
>Ich möchte nun per VBA überprüfen, ob die
>Textmarke Kontaktpers. "leer" ist oder nicht. Wenn keine Kontaktperson
>eingetragen ist, soll die Leerzeile automatisch entfernt werden. Das muß
>oder gehen oder nicht?
Nein (!), so geht nicht. Sozusagen "by design".
Wenn es inklusive [Textmarken] sind, und Du ihnen "" zuweist,
sind sie weg. Exklusive Textmarken sind ohnehin immer leer.
Aber man könnte ja vor der Zuweisung prüfen,
ob überhaupt was zum Zuweisen da ist, und im Falle dass nichts da ist,
den Absatz (!), nehme ich mal an, nicht Zeile (!), löschen.
Pseudocode, so in etwa:
If ObjectExcel.Workbooks(1).worksheets(1),cell(1,4).value = "" then
activedocument.bookmarks("Mark14").range.paragraphs(1).range.delete
Überhaupt gibt es in einem perfekt gestalteten Dokument keine
leeren Absätze, so dass vielleicht eine Routine zum Löschen
leerer Absätze reichen würde.
HTH
Vielen Dank
Gruß
Thomas
"Helmut Weber" <red...@t-online.de> schrieb im Newsbeitrag
news:nensf1dgmfa93agqn...@4ax.com...
> Überhaupt gibt es in einem perfekt gestalteten Dokument keine
> leeren Absätze, so dass vielleicht eine Routine zum Löschen
> leerer Absätze reichen würde.
Schön wärs. :-)
Wenn das Ganze Teil eines Normbriefs ist haben wir irgednwelche Leerzeilen
die natürlich gleich leere Absätze sins über unter dem Betreff.
>> Ich habe meine Adressen in Excel gesammelt und auch eine Spalte
>> Kontaktpers.
>> eingerichtet. Ich wähle die jeweilige Adressen über ein Üserform aus.
>> Der
>> Inhalt der Spalte Konkaktpers. wird an die entsprechende Textmarke
>> übergeben. Da aber nicht immer eine Kontaktperson vorhanden ist, bleibt
>> an
>> der Stelle eine Leerzeile. Ich möchte nun per VBA überprüfen, ob die
>> Textmarke Kontaktpers. "leer" ist oder nicht. Wenn keine Kontaktperson
>> eingetragen ist, soll die Leerzeile automatisch entfernt werden. Das muß
>> oder gehen oder nicht?
Der Herr lobe Excel, aber warum zu Kuckuck muss immer wieder eine
Tabellenkalkulation als Datenbank herhalten???
Wie auch immer, das Dilemma bleibt dasselbe.
Mich würde mal das Desgin des Zieldokumentes interessieren. Ich stimme mit
dem Tenor ganz oben überein: Leerzeilen gibt es nicht - und wenn keine
Daten da sind dann bleibt es leer weil sonst irgendwelche anderen
Formatierungen hinüber sind.
Da mit der Sinn der Gesamtaktion ebefalls abhold geht - will ich leere
Datenzeilen nicht ausgedruckt haben o.ä. dann kann ich auch über Excel
eine entsprechende CSV-Reintext-Datei erzeugen die ich in Word öffne. Aber
was ich in Word von draußen her in Felder anfordere dass muss erst mal
existieren, ob voll oder nicht. Und da es Banane wäre die Feldstruktur
während der Aktion zu knacken (und das müssest du wenn man annähme, dass
du ein einem Serienbrief eine nicht genutzte Kontaktpersonenzeile
raushaben willst) kann ich auch nur hinterher über
Suchen/Ersetzen-Kaskaden diese einfachen Leerzeichen rauskicken wenn ich
vorher schön brav dafür sorgen, dass es nur diesen einen Fall gibt in dem
so eine einsame Leerzeile vorkommt.
Das Einzige was dir hilft sind wohl irgendwelche Bedingung in den
Feldfunktionen die leere Kontaktpersonen (..???) ausblenden, überspringen.
--
Eric March
»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es
verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.«
Joseph Pulitzer
> ich habe folgende Schwierigkeit, mit VBA soll überprüft werden, ob eine
> bestimmte Textmarke leer ist. Wenn das der Fall ist, soll die gesamte
Zeile
> nach Rückfrage gelöscht werden. wie bekommt man das hin?
Bevor wir starten, solltets du ncoh diesen Artikel lesen, dann weisst du was
Helmut meint.
- Arten von Textmarken und ihr Verhalten
http://mypage.bluewin.ch/reprobst/WordFAQ/TM.htm#TM02
Nachher kannst du deinen leeren Absatz, der eine Textmarke entält so
entfernen....
Sub Demo()
Dim oRNG As Range
If ActiveDocument.Bookmarks.Exists("Test") Then
Set oRNG = ActiveDocument.Bookmarks("Test").Range.Paragraphs(1).Range
If oRNG.Text = vbCr Then
oRNG.Delete
End If
End If
End Sub
--
Thomas Gahler
MVP für WordVBA
- Windows XP (SP1), Office XP (SP3)
> > Überhaupt gibt es in einem perfekt gestalteten Dokument keine
> > leeren Absätze, so dass vielleicht eine Routine zum Löschen
> > leerer Absätze reichen würde.
> Schön wärs. :-)
> Wenn das Ganze Teil eines Normbriefs ist haben wir irgednwelche Leerzeilen
> die natürlich gleich leere Absätze sins über unter dem Betreff.
Eben nicht, wenn du Textverarbeitung und nicht Schreibmaschine machst, dann
ist hier der Format -> Absatz -> Absatz nach gefordert und keine leeren
Absätze.
> Und da es Banane wäre die Feldstruktur
> während der Aktion zu knacken (und das müssest du wenn man annähme, dass
> du ein einem Serienbrief eine nicht genutzte Kontaktpersonenzeile
> raushaben willst)
Der Serienbrief hat es schon im Griff leere Absätze zu unterdrücken, du
musst als nichts knacken.
> Suchen/Ersetzen-Kaskaden diese einfachen Leerzeichen rauskicken wenn ich
> vorher schön brav dafür sorgen, dass es nur diesen einen Fall gibt in dem
> so eine einsame Leerzeile vorkommt.
Oder noch einfacher den betreffenden Range ansprechen und löschen...
> Das Einzige was dir hilft sind wohl irgendwelche Bedingung in den
> Feldfunktionen die leere Kontaktpersonen (..???) ausblenden, überspringen.
Aber auch nur wenn Thomas einen Serienbrief macht und das macht er ja gar
nicht.
So und jetzt muss ich es doch mal Los werden. An deinen Betritägen gefällt
mir ganz besonders der philosophische Ansatz. Du schaffst es mit ganz viel
Text so ziemlich wenig zur Frage des Anwenders beizutragen. Ich bringe das
nicht hin...
> »Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es
> verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.«
Meinst du den eigentlich ironisch???
ich meine, erstmal muss die Datenbasis in Ordnung sein,
ob Excel oder sonstwas, spielt keine Rolle.
Wenn ein Familienname da ist, muss auch ein Vorname da sein.
Weiß nicht, gibt's nicht.
Wenn ich eine Rechnung schreibe,
muss da eine Steuernummer sein, leider.
Sonst wird nicht bezahlt.
Natürlich gibt's welche, die bei Steuernummer
eingeben "wird noch nachgetragen". lol
Dann ist die Datenbasis fehlerhaft, und aus!
Theorie, zugegeben. Aber nur so geht's effektiv.
Ich muss mich mit einer großen dummen Datenbank
namens "Verlagsmanager" herumschlagen, die einfach
alle Eingaben akzeptiert, damit die Benutzer zufrieden sind
und keine Fehlermeldungen kriegen.
Handy-Nummer: "Hat kein Handy". Ok, na denn...
> Hallo Eric
>
>> > Überhaupt gibt es in einem perfekt gestalteten Dokument keine
>> > leeren Absätze, so dass vielleicht eine Routine zum Löschen
>> > leerer Absätze reichen würde.
>> Schön wärs. :-)
>> Wenn das Ganze Teil eines Normbriefs ist haben wir irgednwelche
>> Leerzeilen
>> die natürlich gleich leere Absätze sins über unter dem Betreff.
> Eben nicht, wenn du Textverarbeitung und nicht Schreibmaschine machst,
> dann
> ist hier der Format -> Absatz -> Absatz nach gefordert und keine leeren
> Absätze.
Ein Absatz mit sounsdoviel Punkt unterlänge. Verstehe. Das ließe sich
natürlich auch realisieren.
>
>> Und da es Banane wäre die Feldstruktur
>> während der Aktion zu knacken (und das müssest du wenn man annähme, dass
>> du ein einem Serienbrief eine nicht genutzte Kontaktpersonenzeile
>> raushaben willst)
> Der Serienbrief hat es schon im Griff leere Absätze zu unterdrücken, du
> musst als nichts knacken.
? Ja kann er nun Leeres selbstständig löschen oder nicht?
Ich rede davon eineige Datenfelder die Werte aufnhemn zu zerstören wenn in
leers Feld mit der Zielperson einen Absatz (eine Zile) einnimmt. Das
vernichtet mit dme Löschen diese Feld. Ob das gut geht?
>> Suchen/Ersetzen-Kaskaden diese einfachen Leerzeichen rauskicken wenn ich
>> vorher schön brav dafür sorgen, dass es nur diesen einen Fall gibt in
>> dem
>> so eine einsame Leerzeile vorkommt.
> Oder noch einfacher den betreffenden Range ansprechen und löschen...
Dann muss man den kennen.
>> Das Einzige was dir hilft sind wohl irgendwelche Bedingung in den
>> Feldfunktionen die leere Kontaktpersonen (..???) ausblenden,
>> überspringen.
> Aber auch nur wenn Thomas einen Serienbrief macht und das macht er ja gar
> nicht.
Gut. Wo aber hat er dann Sorgen wegen einer Lächerlichen Zeile?
"Serienbrief" ist die Funktion eine Datensammlung aus z.B. Excel zu
übernehen - eine Datensammlung mit Leerstellen. Wie sonst sollte er also
in diese Situation kommen..?
> So und jetzt muss ich es doch mal Los werden. An deinen Betritägen
> gefällt
> mir ganz besonders der philosophische Ansatz. Du schaffst es mit ganz
> viel
> Text so ziemlich wenig zur Frage des Anwenders beizutragen. Ich bringe
> das
> nicht hin...
Und ich verzeifele an knappen/unvollständigen Anfragen bei denen man raten
muss was derjenige will. Und ich bin schelcht im Raten. Bei 2
Möglichkeiten an die jeder denkt finde ich eine dritte…
>> »Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden
>> es
>> verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis
>> behalten.«
> Meinst du den eigentlich ironisch???
>
Bildhaftes hält man im Gedächtnis. Ein "www.toller-link.de" behält man
nicht im Gedächtnis. Kaum glaublich, aber dem ist so.
>
> --
> Thomas Gahler
> MVP für WordVBA
>
> - Windows XP (SP1), Office XP (SP3)
--
Eric March
»Schreibe kurz - und sie werden es lesen. Schreibe klar und sie werden es
verstehen. Schreibe bildhaft - und sie werden es im Gedächtnis behalten.«
Joseph Pulitzer
> > ist hier der Format -> Absatz -> Absatz nach gefordert und keine leeren
> Ein Absatz mit sounsdoviel Punkt unterlänge. Verstehe. Das ließe sich
> natürlich auch realisieren.
Ne, das war das was Helmut gemeint hat, also keine leeren Absätze.
> > Der Serienbrief hat es schon im Griff leere Absätze zu unterdrücken, du
> > musst als nichts knacken.
> ? Ja kann er nun Leeres selbstständig löschen oder nicht?
> Ich rede davon eineige Datenfelder die Werte aufnhemn zu zerstören [...]
Der Serienbrief löscht nicht, er kann unterdrücken, wenn ein Absatz leer
ist.
> >> Suchen/Ersetzen-Kaskaden diese einfachen Leerzeichen rauskicken wenn
ich
> >> Oder noch einfacher den betreffenden Range ansprechen und löschen...
> Dann muss man den kennen.
Den kennst du, denn die Textmarke ist bekannt und die hat je einen Range,
welcher wiederum innerhalb des Ranges des gesuchten Absatzes liegt
- ActiveDocument.Bookmarks("Test").Range.Paragraphs(1).Range
> > Aber auch nur wenn Thomas einen Serienbrief macht und das macht er ja
gar
> Gut. Wo aber hat er dann Sorgen wegen einer Lächerlichen Zeile?
In seinem Dokument, das mittels VBA gefüllt wird
> "Serienbrief" ist die Funktion eine Datensammlung aus z.B. Excel zu
> übernehen - eine Datensammlung mit Leerstellen. Wie sonst sollte er also
> in diese Situation kommen..?
Er schreibt es ja so schön in seiner Frage »...Ich wähle die jeweilige
Adressen über ein Üserform aus...«. Er list die Daten ab Exceltabelle auf
eien UserForm ein, wählt aus und füllt mit den Daten via VBA alle Textmarkn
ab. Aber dort wo nichts weiss, diese Textmarke, bzw den ganzen Absatz wo das
Ding drin steht will er löschen.
> Und ich verzeifele an knappen/unvollständigen Anfragen bei denen man raten
> muss was derjenige will.
Nicht Raten, lesen oder ein *kurze* Rückfrage stellen
>> Oder noch einfacher den betreffenden Range ansprechen und löschen...
>> Dann muss man den kennen.
> Den kennst du, denn die Textmarke ist bekannt und die hat je einen Range,
> welcher wiederum innerhalb des Ranges des gesuchten Absatzes liegt
>
> - ActiveDocument.Bookmarks("Test").Range.Paragraphs(1).Range
Tja, dann hätte man das dem OP mal anheim geben sollen.
> Er schreibt es ja so schön in seiner Frage »...Ich wähle die jeweilige
> Adressen über ein Üserform aus...«. Er list die Daten ab Exceltabelle auf
> eien UserForm ein, wählt aus und füllt mit den Daten via VBA alle
> Textmarken ab.
Me culpa. Aber wenn er eine Userform einsetzt verstehe ich effektiv noch
viel weniger - dan aht er das gnaze Projekt doch irgnedwie falsch angepakt.
Er het dann keinen Serienbreif mit dem Gedanken der Wiederholung sondern
"nur" einige Felder des Formulars die man auf simple Weise in eine freie
Teststruktr einbetten kann; bisschen If-Then und fertig.
Entweder ich sehe solche möglichen Leerfelder vor und lebe damit - oder
mein Plan hat Löcher größer als das Loch Ness.
>> Und ich verzeifele an knappen/unvollständigen Anfragen bei denen man
>> raten
>> muss was derjenige will.
> Nicht Raten, lesen oder ein *kurze* Rückfrage stellen
Ich ziehe ausführlichere Rückfragen vor…
Oder stattdessen 4-5 kurze (am besten mit Radiobuttons :-D )
>> >> Oder noch einfacher den betreffenden Range ansprechen und löschen...
>> >> Dann muss man den kennen.
>> > Den kennst du, denn die Textmarke ist bekannt und die hat je einen
Range,
>> > welcher wiederum innerhalb des Ranges des gesuchten Absatzes liegt
>> >
>> > - ActiveDocument.Bookmarks("Test").Range.Paragraphs(1).Range
>> Tja, dann hätte man das dem OP mal anheim geben sollen.
War ja in er Ausgangsfrage schon so deklariert »...ich habe folgende
Schwierigkeit, mit VBA soll überprüft werden, ob eine bestimmte Textmarke
leer ist...«. Für mich bedeutet, dass eine bestimmte klar definiert ist,
also weiss ich auch welche und somit deren Namen. Ganz einfach.
> > Er schreibt es ja so schön in seiner Frage »...Ich wähle die jeweilige
> > Adressen über ein Üserform aus...«. Er list die Daten ab Exceltabelle
auf
> > eien UserForm ein, wählt aus und füllt mit den Daten via VBA alle
> > Textmarken ab.
> Me culpa.
:-)
> Aber wenn er eine Userform einsetzt verstehe ich effektiv noch
> viel weniger - dan aht er das gnaze Projekt doch irgnedwie falsch
angepakt.
> Er het dann keinen Serienbreif mit dem Gedanken der Wiederholung sondern
> "nur" einige Felder des Formulars
Kein Formular eine UserForm und ein Dokument mit Textmarken drauf.
> die man auf simple Weise in eine freie
> Teststruktr einbetten kann; bisschen If-Then und fertig.
Eben und in so ein If packt er rein, ob er was in die Textmarke schreibt
oder diese entfernt.
oder
Erbeschriebt einfach alle (z.T. mit einer leeren Zeichenkette) und prüft am
Schluss welche jetzt immer noch leer sind und diese werden entfernt.
Sein Vorlage seht ungefähr so aus (das ][ soll die Texmarke darstellen,
das Wort dahinter ist nur der Name der Textmarke. Im Dokument selber sieht
er nur ][¶ mehr nicht)
][ Name¶
][ Anrede¶
][ Strasse¶
][ Ort
nach dem Ausfüllen sieht es dann so aus
][ Eric March¶
][ ¶
][ Wordstrasse 2002¶
][ 76543 Irgendwo¶
und wiel das nicht schön aussieht will er den Absatz mit der Textmarke
'Anrede' jetzt noch löschen
][ Eric March¶
][ Wordstrasse 2002¶
][ 76543 Irgendwo¶
und jetzt sind alle Glücklich....