yosimo
Goto Top

Leerzeichen löschen per Makro

Moin,

ich habe ein Makro geschrieben, das mir z.B. in Adressdaten unnötige Leerzeichen in den Zellen entfernt, die am Anfang oder am Ende des Zelleneintrags stehen:

Sub Leerzeichen_entfernen()
For Each Zelle In Selection
Zelle.Value = Trim(Zelle.Value)
Next
End Sub

Das Makro funktioniert gut, ABER ich muss vor der Ausführung die Zellen erst markieren.
Wie muss ich das Makro ändern, damit es ohne vorheriges Markieren auf das geöffnete Tabellenblatt wirkt?

Arbeite mit Excel 2007 unter Win7

MfG
Yosimo

Content-ID: 166564

Url: https://administrator.de/contentid/166564

Ausgedruckt am: 25.11.2024 um 21:11 Uhr

vossi31
vossi31 19.05.2011 um 13:01:17 Uhr
Goto Top
"Cells.Selec" vor die For Each Schleife

Henning
bastla
bastla 19.05.2011 um 13:02:42 Uhr
Goto Top
Hallo Yosimo!

Du könntest zwar "Selection" durch "Cells" ersetzen - aber das willst Du (besonders bei Excel2007) nicht wirklich face-wink (BTW: Ein VBA-Programm kannst Du mit <Strg>+<Pause> abbrechen) ...

... daher eher eine der Zellen vorweg markieren und zB "ActiveCell.CurrentRegion" verwenden.

Grüße
bastla
Yosimo
Yosimo 19.05.2011 um 13:28:45 Uhr
Goto Top
Vielen Dank für die Tipps.

" ... aber das willst Du (besonders bei Excel2007) nicht wirklich... "
in der Tat: das dauert ja ewig. Danke für den Hinweis zum abbrechen face-wink. Hennings Vorschlag läuft wohl auf das selbe hinaus.

Ich denke, ich nehme die "ActiveCell.CurrentRegion" Version. Was genau beinhaltet denn die CurrentRegion?

Gruß
Yosimo
Snowman25
Snowman25 19.05.2011 um 15:53:43 Uhr
Goto Top
Hallo @Yosimo,
Zitat von @Yosimo:
Ich denke, ich nehme die "ActiveCell.CurrentRegion" Version. Was genau beinhaltet denn die CurrentRegion?
Die CurrentRegion der zusammenhängende Bereich an Zellen, in dem du dirch gerade befindest.
Beispiel:
\ A B C D E
1 Daten1 Daten2 Daten3
2 abc 152 test
3 dies repräsentiert Daten
4
5 hier auch noch welche

In diesem Beispiel wäre deine ActiveRegion B1:D3 wenn sich dein Curser innerhalb dessen befindet.

Gruß
Snow


Gruß
Snow
Yosimo
Yosimo 19.05.2011 um 17:02:10 Uhr
Goto Top
Aha, hab's kapiert, Danke!

Da schießt mir auch gleich die Frage in' Kopf, ob man mit einem Makro die Anzahl der CurrentRegions auslesen kann....

Gruß
Yosimo
Biber
Biber 19.05.2011 um 18:53:45 Uhr
Goto Top
Moin Yosimo,

Zitat von @Yosimo:
Aha, hab's kapiert, Danke!

Da schießt mir auch gleich die Frage in' Kopf, ob man mit einem Makro die Anzahl der CurrentRegions auslesen kann....

Die Beantwortung dieser Frage traue sogar ich mir zu, obwohl VBA-Makros nun nicht gerade mein Hobby sind.

Die Anzahl der CurrentRegion ist konstant und unveränderlich immer gleich eins, wenn denn überhaupt eine existiert.

Von daher fände ich das Schreiben eines Makros zum Durchzählen der Anzahl eigentlich ein weing übertrieben.

Okay, es übt....

Grüße
Biber
Yosimo
Yosimo 20.05.2011 um 15:48:49 Uhr
Goto Top
Hallo Biber,

ja klar, die CurrentRegion kann immer nur eine sein, nämlich die, in der sich die aktive Zelle befindet.

Was ich meinte ist die Anzahl aller möglichen zusammenhängenden befüllten Zellen, die eine CurrentRegion sein könnten, wenn sich die Aktive Zelle darin befinden würde.

Eine CurrentRegion scheint ja dermaßen definiert zu sein, dass nebeneinanderliegende befüllte Zellen durch umliegende Leerzellen und/oder Tabellenblattrand begrenzt sind. Derartige Inseln befüllter Zellen könnten ja mehrere in einem Tabellenblatt enthalten sein. Die Anzahl dieser möglichen Inseln per Makro auszugeben war der Sinn meiner Frage. (Als Beispiel fällt mir eine Adressdatei ein, die z.B. nach jedem PLZ-Bereich eine leere Zeile enthält, oder zur optischen Trennung leere Spalten ....)

Ist aber nicht so wichtig, denn da habe ich den in Frage kommenden Tabellenbereich doch schneller per Hand ausgewählt.

Grüßle
Yosimo
Snowman25
Snowman25 23.05.2011 um 10:23:51 Uhr
Goto Top
Hallo @Yosimo,

Du könntest z.B. alle beschriebenen zellen anschauen und die jeweligen CurrentRegions vergleichen. (einfach und langsam)
Du könntest aber auch die erste beschriebene Zelle nehmen, und deren CurrentRegion oben so einsetzen, dass vor jedem Check geprüft wird, ob die aktuelle Zelle innerhalb der bereits gefundenen CurrentRegions ist. (komplexer, aber schneller).
Allerdings weiss ich nicht, wie sich eine Tabelle verhält die so aussieht:
\ A B C D E
1 abc def ghi
2 def ghi jkl
3 ghi jkl mno pqr stu
4 pqr stu vw
5 stu vw x
6 vw x yz

Wenn jetzt C3 (mno) markiert wäre. wäre die CurrentRegion dann A1:E6 oder was anderes?
und wenn B2 markiert wäre (ghi), ist die CurrentRegion dann A1:C3 oder A1: E6?
Und wie sieht das aus, wenn D3:E3 leer wäre, die Verbindung also nur nach unten besteht?
Da müsste man also noch etwas recherchieren.

Gruß
Snow