HERBERS Excel-Forum - das Archiv
aktuelle Cursorposition in einer Zelle per VBA
petr
Hallo Forum,
eigentlich dachte ich, dass ich ein banales Problem habe, das man mit einem 'Einzeiler' per VBA lösen kann. Scheint aber nicht so..
Was ist brauche ist simpel.
In Excel-Tabelle, in einer Zelle steht Text, den ich mitten drin, an einer beliebigen Stelle, erweitern will. Nicht mit zusätzlichen Text, sondern mit einem Sonderzeichen, das ich über Tastatur nicht direkt eingeben kann.
Beispiel:
"text1 text2 text3 t..."
.. und ich will zB. vor 'text3' ein Zeichen (▓) einfügen, also etwa:
"text1 text2 ▓text3 t..."
Sinn von dem Ganzen ist, im bestehendem Text, der manchmal ziemlich lang sein kann, eine Markierung einzufügen, die diese Stelle im Text optisch hervorhebt, sodass sie gut sichtbar ist. Also nichts löschen, sondern an der aktuellen Cursorposition im Text ein Zeichen einfügen.
Ich kann das zwar mit der Tastenkombination >alt-178< machen, es ist aber zu umständlich, da es öfters vorkommt.
Mit Application.OnKey bin ich gescheitert, da mir eine Funktionen nichts bringt, mit Sendkeys genauso.
Ich dachte dass ich die aktuelle Cursorposition innerhalb der Zelle per VBA auslesen kann, und dann neuen String bilden kann,
left von Cursor + mein Zeichen + right von Cursor,
den ich in die aktuelle Zelle schreibe.
Ich fand aber keine Funktion, die mir die aktuelle Cursorposition in einer Zelle zurückgibt.
Notlösung wäre dass ich ein anderes Zeichen einfüge, etwas was direkt über Tastatur geht, und was ich (so gut wie) nie nutze, und dieses Zeichen dann per ein Makro, das ich extra aufrufen müsste, in mein Zeichen umsetze.
Aber geht es nicht einfacher? Gibt es wirklich keine Funktion die aktuelle Cursorposition innerhalb einer Zelle zurück gibt? Hat jemand eine Idee?
Danke,
Petr

AW: aktuelle Cursorposition in einer Zelle per VBA
Onur
"Sinn von dem Ganzen ist, im bestehendem Text, der manchmal ziemlich lang sein kann, eine Markierung einzufügen, die diese Stelle im Text optisch hervorhebt, sodass sie gut sichtbar ist." - Wieso nicht einfach diese Stelle bzw die ganze Textpassage rot zu färben ?
AW: aktuelle Cursorposition in einer Zelle per VBA
Yal
Hallo Petr,

das Editieren einer Zelle bildet einen Zustand, während dessen Makros nicht gestartet werden können. Im allgemein funktioniert die Interaktion zwischen User und Makro über Ereignisse: eine Zelle ist markiert, eine Zelle ist editiert, ein Blatt ist gewählt, usw.

D.h. man müsste den Inhalt der Zelle beim Auswahl der Zelle in einer Variable speichern, dann die Zelle ändern und dann auf die Änderung reagieren.
So könntest Du z.B. eine Semikolon (oder "-", oder "|", oder ...) an der Stelle setzen und beim Abschließen des Editier-Modus die aktuelle mit der vorige Version vergleichen und der Zeichen ersetzen.

VG
Yal
AW: aktuelle Cursorposition in einer Zelle per VBA
daniel
Hi

Wie schon geschrieben, die Bearbeitungszeile ist VBA-freie Zone.

Ich sehe da zwei möglichkeiten:

a) du machst die Eingabe in ein ActiveX-Textfeld, da hast du vollen VBA-Zugriff

b) du nutzt die Autokorrektur von Excel
Die findest du unter DATEI - OPTIONEN.
Hier kannst du festlegen, dass bestimmte Zeichen oder Zeichenfolgen sofort durch ein anderes Zeichen ersetzt werden.
Dh du gibst dann ein seltenes Zeichen oder Zeichenfolge über die Tastatur ein (z.B. "~#") und dieses wird dann automatisch durch dein Sondezeichen ersetzt.

Also im Prinzip deine "Notlösung", nur dass du die nicht programmieren musst, weil Excel das schon "offiziell" vorgesehen hat.

Gruß Daniel

AW: aktuelle Cursorposition in einer Zelle per VBA
petr
Hi Daniel,
das ist es.
Die Option b) mit Autokorrektur ist genau was ich brauche.
Ich habe inzwischen meine "Notlösung" aktiviert, die habe ich aber jetzt durch deine ersetzt, und es läuft prima, danke.
Vielleicht kannst du mir noch einen Tipp für die Zukunft geben,
in meiner ersten Lösung habe ich mit "replace" gearbeitet, ich konnte aber das Sonderzeichen "▓" im VBA-Editor nicht eingeben, weder mit alt+178 noch über kopieren und einfügen, auch Makroaufzeichnung hat keinen Erfolg gebracht, in VBA wurde das Zeichen immer durch ein anderes ersetzt. Auch char () hat nicht geholfen. Ich habe dieses Problem letztlich so gelöst, dass ich das Sonderzeichen in eine unbenutzte Zelle im Kopf der Tabelle reingeschrieben habe, und dann beim "replace" die Zelle als Quelle eingegeben habe:

ActiveCell.Replace "~~", Cells(3, 10).Value

Keine tolle Lösung, aber es ging.
Ich brauche es zwar jetzt nicht mehr, da ich deine Lösung nutze,
aber weisst du zufällig wie man so ein Sonderzeichen, und eventuel andere, im VBA-Editor eingibt?
In der Autokorrektur ging es mit c&p problemlos.

Grüße
Petr
AW: aktuelle Cursorposition in einer Zelle per VBA
daniel
Hi

Wenn man ein Zeichen im VBA-Editor nicht eingeben kann, so muss man es über die Funktion Chr(178) angeben.

Sollte es ein Unicodezeichen sein (Code > 255) dann mit ChrW(x) oder WorksheetFunction.Unichar(x)

Gruß Daniel
AW: aktuelle Cursorposition in einer Zelle per VBA
daniel
Noch ein Tipp:

Wenn bei Range(..).Replace nur eine Zelle als Bereich angibt, dann nimmt Excel das ganze Blatt. Hängt vermutlich damit zusammen, dass ERSETZTEN ein erweitertes FINDEN ist und finden mit nur einer Zelle Unsinn ist.

Wenn man bei einer einzigen zu bearbeitenden Zelle Sichergehen will, dass nicht anderer Stelle was ersetzt wird was bleiben soll, muss man die Textfunktion REPLACE verwenden:

ActiveCell.value = Replace(ActiveCell.Value, "A", "B")

Gruß Daniel

AW: aktuelle Cursorposition in einer Zelle per VBA
petr
Alles klar, danke für die Tipps.
Das mit dem ganzen Blatt beim Replace erklärt Einiges, was mich in Vergangenheit überrascht hat,
gp
AW: aktuelle Cursorposition in einer Zelle per VBA
petr
.. danke, anscheinend muss ich in diese Richtung gehen..
AW: aktuelle Cursorposition in einer Zelle per VBA
Yal
Hallo Petr,

aber die Idee von Onur finde ich auch gut: entweder gibt es eine einfache Tastenkombination, um den Texthintergrund farblich zu setzen, oder man kann einen Symbolleistenelement mit einer Kombi einrichten.
Die Verwendung von Tastenkombination oder Tastenfolge sind sehr effektiv und haben nicht den Last von einer Datei mit Makro.

VG
Yal
AW: aktuelle Cursorposition in einer Zelle per VBA
petr
Ich weiss, ich habe Onur schon geantwortet, da ich Forum neu bin, ging die Antwort anscheinend verloren :-(
In den Tabellen werden verschiedene Farben schon als Markierung von verschiedenen Zellen verwendet, die kann ich nicht nutzen.
In jedem Fall danke für die Hilfe..
AW: aktuelle Cursorposition in einer Zelle per VBA
Firmus
Hi Petr,

schau dir doch das mal an, vllt. passt es.

Sub ColorIndexZeigen_FarbeInText()

For i = 1 To 56
With Range("A" & i)
.Value = "Colorindex: " & i & " sieht so aus"
.Font.ColorIndex = i
End With
Next i
i = i 'Debug-Stop

Range("G3").Characters(Start:=20, Length:=2).Font.ColorIndex = 3

ActiveCell.Characters(Start:=1, Length:=4).Font.ColorIndex = 3
ActiveCell.Characters(Start:=11, Length:=4).Font.ColorIndex = 3

Range("g3").Characters(Start:=10, Length:=7).Font.ColorIndex = 5
Range("g3").Characters(Start:=10, Length:=7).Font.Bold = True
Range("g3").Characters(Start:=10, Length:=7).Font.Underline = True
i = i 'Debug-Stop

End Sub


Das ist nicht alles auf meinem "Mist" gewachsen, Ich sah das vor Jahren im Forum.
Nun konnte ich es aus dem Gedächtnis und mit googles Hilfe wieder nachvollziehen.

Gruß,
Firmus
AW: aktuelle Cursorposition in einer Zelle per VBA
petr
Hi Firmus,
nett von dir dass du gesucht hast,
es ist eine interessante Übersicht über die Farben..
AW: aktuelle Cursorposition in einer Zelle per VBA
Firmus
Hi Petr,

die Farbenliste ist nur da, um zu sehen welche Farbe bei welcher Ziffer angezeigt wird.
Interessanter ist der Teil 2. Dort siehst du wie man Teiltexte einer Zelle einfärbt, Bold setzt, Unterstreicht.

Range("G3").Characters(Start:=20, Length:=2).Font.ColorIndex = 3


ActiveCell.Characters(Start:=1, Length:=4).Font.ColorIndex = 3
ActiveCell.Characters(Start:=11, Length:=4).Font.ColorIndex = 3

Range("g3").Characters(Start:=10, Length:=7).Font.ColorIndex = 5
Range("g3").Characters(Start:=10, Length:=7).Font.Bold = True
Range("g3").Characters(Start:=10, Length:=7).Font.Underline = True


Gruß,
Firmus