2.4k Aufrufe
Gefragt in Windows 7 von
Ich möchte gern ein Makro schreiben, mit dem ich die Zeichen einer Zeile in einem Word- Document zählen kann. Alle Zeilen haben ein Return. fIch arbeite immer noch mit office 2000 auf Win7.
Wer kann mir helfen?
Gruß Ura

12 Antworten

0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Zeichne ein Makro auf das dir die Zeichen-Zählen Funktion aufzeigt.

Die Funktion sollte sich im Menü Extras aufhalten; im Grunde wäre also nicht mal ein Makro nötig.

Eric March
0 Punkte
Beantwortet von kjg17 Profi (34.4k Punkte)
Hallo Ura,

setzte einfach den Kursor hinter das letzte Zeichen der Zeile und sieh unten in der Statuszeile in zweiten Feld von links nach. Da steht dann z.B. "Bei 4,4 cm Ze 5 Sp 84" was so zu verstehen ist, dass sich 4,4 cm vom Blattrand entfernt die 5 Zeile befindet und der Kursor vor der 84. Spalte befindet. Links von Kursor sind also in der 5. Zeile 83 Zeichen, wobei die Leerzeichen zwischen den Wörtern auch als Zeichen gezählt werden.

Das ganze hört sich für mich so an, als ob du ein Dokument erstellen sollst, welches pro Zeile nur eine bestimmte Anzahl Zeichen enthalten darf. Dafür solltest du dir besser eine Dokumentenvorlage einrichten, statt in jeder Zeile die Zeichen zu zählen und sie jeweils mit Return abzuschließen.

In der Formatvorlage (Absatz) müsstest du zunächst eine nichtproportionale Schrift wir z.B. 'Courier New' einstellen, bei solchen Schriften nimmt jedes Zeichen den gleichen Platz ein. Bei einer Schriftgröße von 12 pt kommst du so z.B. auf etwa 60 Zeichen pro Zeile. Ob die Zeile bei Eingabe eines weiteren Buchstabens tatsächlich automatisch umgebrochen wird.musst du testen. Über die Anpassung der Randbreite lässt sich das jedoch 'nachjustieren'.

Ist auch die Zeilenzahl pro Seite zu begrenzen, gehst du analog vor. Wenn bei der Absatzformatierung bei Abstand Vor: und Nach: jeweils 0 pt und ein Zeilenabstand von 1,5 Zeilen eingestellt wird, ergibt das bei Courier New 12 pt z.B. 35 Zeilen pro Blatt.

Zum Testen lässt du einfach mit =Rand(10) (+ Enter) eine Fülltext erstellen, den du vor dem Speichern der Vorlage natürlich wieder löschst.

Wenn du diese Formatvorlage zur Erstellung eines neuen Dokumentes benutzt, musst du dir um die maximale Anzahl der Zeichen pro Zeile und die Anzahl der Zeilen pro Blatt, keinen Kopf mehr machen und kannst einfach drauflos tippen.

Gruß
Kalle
0 Punkte
Beantwortet von
Hallo,
vielen Dank für Eure Antworten, die mir gründlich klar gemacht haben, dass ich mich nicht deutlich genug ausgedrückt habe!
Also: Ich habe mehrere Seiten Listen in Word, die ich zeilenweise kopieren und hinter einem vorher gesetzten Gleichheitszeichen in der selben Zeile wieder eingefügen muss. (Natürlich vor dem Return). Später muss ich dann noch die Leerzeichen aus dem hinteren Teil entfernen. Da die Zeilen alle ungleich lang sind, muss ich die Anzahl der Zeichen (für count) an eine Variable übergeben.
Mein grösstes Problem ist die richtige Ende-Bedingung für die For..next Schleife zu finden.
Hoffentlich gibt es dafür auch eine einfache Antwort.
Gruß Peneler
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
?? Was zäumst du dann für Pferdeherden auf?

Word kann mit eigenen Mitteln im Text navigieren und auch (Leer)ziechen löschen. Mir deucht, dass du Geister bekämpfen willst die es eigentlich gar nicht gib.

Stelle hier mal eine Dummyliste auf mit der du uns die kritschen Punkt aufzeigst - und den Code mit dem besagten For-Next.

Eric March
0 Punkte
Beantwortet von
hallo Eric,

natürlich ist mir klar, dass ich das in Word machen könnte, aber das alles "zu Fuss" ist ziemlich nervtötend. Die Leerzeichen muss ich nur im hineren Teil jeder Zeile entfernen. Mit suchen/ersetzten ist das auch zeimlich mühsam. Außerdem geht es mir vor allem um die Ende-Bedingung, die ich auch für andere Macros brauche.

Mein Ansatz war:
For s = 0 To EndKey
( Selection.)MoveRight Unit:=wdCharacter, Count:=1
s = s + 1
Next
aber das funktioniert nicht. Das Macro springt nach einem Durchgang aus der Schleife (also, wenn der Cursor sich gerade um eine Position verschoben hat und noch weit vom Zeilenende etfernt ist.)
Da ich noch mehrere solcher Listen bearbeiten muss, lohnt sich der Aufwand für ein Makro sehr wohl und wie schon gesagt: Ich hoffe dadurch auch etwas dazu zu lernen, da ich aus der Übung bin und mehr mit früheren VB-Versionen gearbeitet habe.
Gruß Peneler
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Wie gesagt, WORD kann navigieren - aber das ist in der Tat ein gewisses Gezerre.

Deswegen nochmals die Bitte um ein Muster wie diese Tabellen die umgeräumt werden sollen aufgebaut sind - damit wir eine Regel finden können mit der man sich da durchhangeln kann.

Eric March
0 Punkte
Beantwortet von
Noch einmal ganz deutlich: Ich habe nie von Tabellen gesprochen!
Es handelt sich einfach um Listen (Text jeweils mit einem Return am Ende). Was ich damit tun muss habe ich bereits oben beschrieben.Da ich mehrere solcher Listen bearbeiten muss, lohnt sich die Arbeit mit einem Marcro meiner Meinung nach durchaus.
Was ich damit tun muss habe ich bereits oben beschrieben.

Aber was ist denn nun mit einer (Zeilen)Ende-Bedingung und mit welchem Befehl kann ich die Zeichen zählen?

Ura
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Mea Culpa eine Liste intuitiv als tabellarische Aufstellung zu titulieren.


«Es handelt sich einfach um Listen (Text jeweils mit einem Return am Ende).»
Wie sehen dies Listeen aus? Was befindet sich textmäßig davor, was dahinter? An was für Textstellen soll sich denn das Makro orientieren können?

So eine ‹Zeile›, und bestände sie aus nur dem Wert ohne alles, die mit Enter abgeschlossen ist ist ein logischer Absatz an dem wir uns orientieren können. Es ist damit keine Zeile.

«Später muss ich dann noch die Leerzeichen aus dem hinteren Teil entfernen.» Wo und hinter was finden sich diese Leerzeichen? Was spräche profan gegen Suchen/Ersetzen als erste Maßnahme nach dem Einfügen? (Auch das wäre per Makro zu organisieren.)
Oder was sonst hat es mit den Leerzeichen auf sich?

«Ich habe mehrere Seiten Listen in Word»
Wie sind die Seiten getrennt?

«die ich zeilenweise kopieren und hinter einem vorher gesetzten Gleichheitszeichen in der selben Zeile wieder eingefügen muss.»
In der selben Zeile..? Das könnte man auch lesen, dass vorne jedes mal ein = zu ergänzen wäre.

«Da die Zeilen alle ungleich lang sind, muss ich die Anzahl der Zeichen (für count) an eine Variable übergeben.»
Zwecks wessen behuf? Was nützt die diese Länge, was willst du damit anstellen?
Was kann nicht Word über (so weit ich Quell- und Zieldaten interpretiere) Sucher/Ersetzen bereits erledigen?


125.887€······¶
->
=·125.887€¶

…und das über ein ganze Reihe von Zahlen? Die vllt. schön rechtsbündig sortiert sein sollen?

Eric March
0 Punkte
Beantwortet von
Also irgendwie habe ich das Gefühl, ich hätte mich vorher in einer fremden Sprache (jedenfalls nicht deutsch) ausgedrückt. Ich fühle mich ein bisschen veralbert, aber da ich immer noch Hoffnung auf konkrete Hilfe (echte Hilfe) habe, versuche ich es noch einmal.
"Wie sehen dies Listeen aus? Was befindet sich textmäßig davor, was dahinter? An was für Textstellen soll sich denn das Makro orientieren können"
Ich weis nicht wie ich eine Liste noch genauer beschreiben soll.
Eine Tabelle besteht für mich aus mehreren Spalten und Zeilen.

Was ich habe, ist einfach Text, wie z.B.:

Abend wird es wieder
Hört Ihr Leut und lasst euch sagen
'
'
usw über mehrere Seiten.

Daraus soll werden:

Abend wird es wieder =Abendwirdeswieder
Hört Ihr Leut und lasst euch sagen =HörtIhrLeutundlassteuchsagen

das alles zu Fuss ist reichlich nervtötend.
was ich brauche ist eine Zeilenende-Bedingung und ein Befehl zum Zählen der Zeichen. Auch das Entfernen der Leerzeichen würde mit Suchen/Ersetzen "zu Fuss" einen ziemlichen Aufwand erfordern.
Ich bin ja mal gespannt, ob das jetzt eine klärende Antwort war.
Peneler
0 Punkte
Beantwortet von ericmarch Experte (4.6k Punkte)
Jetzt, wo ich ein Beispiel sehe weiß ich endlich was du willst.

»Du hast viele Zeilen die durch ein = abgetrennt und aller Leerzeichen entledigt jeweils ans Ende der selben Zeile kopiert werden sollen.«

Ehrlich gesagt, ich wäre sogar so weit das nach Excel zu geben, dort zu manipulieren und wieder in Word einzukleben.

Aus der Hand für Excel:
Sub T1()
Dim I As Integer
Dim J As Integer
Dim Eingang As String
Dim Ausgang As String
I = 1
Do
Eingang = Cells(I, 1)
Ausgang = Eingang & "="
For J = 1 To Len(Eingang)
If Mid(Eingang, J, 1) <> " " Then _
Ausgang = Ausgang & Mid(Eingang, J, 1)
Next
Rem ich überschreibe nur sehr ungern
Cells(I, 2) = Ausgang
I = I + 1
Loop Until Cells(I, 1) = ""
End Sub

Alles in Spalte A und in Spalte B kommt das Resultat zurück.

Das ist in Word nur viel umständlicher zu machen - ohne jetzt zu behaupten, dass dieser Weg ein grundsätzlich eleganter wäre. Er ist effektiv, das genügt mir.

Eric March
...