Clever-Excel-Forum

Normale Version: Steuerung der Anzeige einer Textbox durch Zeilenauswahl
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Seiten: 1 2 3 4 5
Hi liebe Experten,

ich habe zwei Textboxen identischer Größe, die genau parallel nebenenander liegen.

TextBox1 ist auf Multiline geschaltet und zeigt den Inhalt der Zellen A1 bis A10 an. Textbox2 ist ebenfalls auf Multiline geschaltet und zeigt zunächst nichts an. Jetzt soll folgendes passieren: Wenn ich in der Textbox1 irgendeine Zeile anklicke wird diese vollständig markiert. In der Textbox2 soll dann der äquivalente Inhalt aus dem Bereich B1 bis B10 stehen. Also ich wähle in der Textbox1 die Zeile 5 aus, dann steht in der TextBox2 der Inhalt aus Zelle B5 und zwar genau in der Höhe von Zeile 5 aus Textbox1. Wähle ich jetzt weiter Zeile 2 aus Textbox1 aus, steht in Textbox2 der Inhalt von Zelle B2, natürlich wieder in der Höhe von Zeile 2 aus Textbox1. Der Inhalt von zuvor in der Textbox2 erschienenen Inhalten soll aber dabei selbstverständlich nicht verschwinden. Die Textbox2 soll sich also nacheinander in Abhängigkeit von der getroffenen Auswahl aus Textbox1 auffüllen am Ende die Inhalte parallel nebeneinander
Hallo sotaros,

bist Du Dir sicher, das Du Textboxen hast? Schaue mal in unseren Beispielteil zu den abhängigen Auswahlfeldern ...
Hallo André,

ja das Ganze soll über 2 Textboxen programmiert werden. Das ganze ist dann so ähnlich wie ein Vokabellernprogramm.
Du wählst eine Zeile aus Textbox1 aus und direkt daneben erscheint dann die Lösung in Textbox2
Hallöchen,
Und wieso nimmst Du keine Dropdowns? Das geht dann ohne VBA. Hast Du Dir mal das Beispiel angeschaut?
Hallo André,

ich weiß, dass die Programmierung vielleicht nicht ganz so einfach ist. Aber
ich will eine Lösung in der in Textbox1 ausgewählt wird und in Textbox2 dann der
äquivalente Text aus Spalte B angezeigt wird. Zum einen ist die ganze Sache Teil
eines größeren Projekts zum anderen wäre für mich auch der Programmiercode selbst
sehr interessant.
Hallo sotaros,

da eine TextBox keinerlei Index hat (wie z. B. eine ComboBox oder eine ListBox) kannst Du keine Zeile darin anklicken um die dann markiert zu bekommen.

So, wie ich Dein Ansinnen sehe, bist Du auf dem "Holzweg".

Gruß Peter
Hi Peter,
ja es ist nicht unbedingt leicht. Aber ich bin sicher das VBA Profis das hinbekommen.

siehe auch folgender Thread:
'http://www.vb-fun.de/cgi-bin/loadframe.pl?ID=vb/tipps/tip0336.shtml
Hallöchen,

eine Textbox hat aber andere lohnende Eigenschaften, je nachdem, welche Textbox man nimmt. Kompliziert wird es mit der "einfachen" Textbox, da diese lediglich ein Makro bei Klick starten kann. Da ist nichts mit Markieren usw. Man könnte aber über diverse API und Umrechnungen je nach Schriftgröße, Zoom usw. mit etwas Glück die Zeile herausbekommen.

Einfacher wäre es mit der anderen Textbox - der ActiveX. Die hat Eigenschaften, mit denen man die Position im Text oder sogar die Zeile herausbekommt. Das dann in einem Mausereignis, und los geht's Smile

Code:
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
MsgBox TextBox1.CurLine '.LineCount / .SelStart u.a.
End Sub

Die Zählung beginnt mit Linie 0. Um die zweite Textbox mit dem richtigen Text zu füllen, musst Du nur eins hinzuzählen.

Aber, wie gesagt, ich hätte das anders gelöst Wink
Hallo sotaros,

das von Dir zitierte Beispiel ist eine Visual Basic Programmierung, die sicherlich nicht unter VBA zum Laufen gebracht werden kann.

Gruß Peter
Hallöchen,

hier jetzt der um die Markierung in Textbox1 erweiterte code:

Code:
Private Sub TextBox1_MouseUp(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
'Variablendeklaration
'Variant-Array
Dim arrZeilen
'Text der textbox anhand der Zeilenenden splitten
arrZeilen = Split(TextBox1, vbLf)
'Start der Markierung berechnen, Trennung hier anhand erstem Auftreten des textes der angeklickten Zeile  
TextBox1.SelStart = Len(Split(TextBox1, arrZeilen(TextBox1.CurLine))(0)) - TextBox1.CurLine
'Länge anhand der Textlänge der angeklickten Zeile
TextBox1.SelLength = Len(arrZeilen(TextBox1.CurLine))
'Hinweis: Die Markierung wird nur dann exakt gesetzt, wenn der Text der Zeile in der Box eindeutig ist.
End Sub
Seiten: 1 2 3 4 5