Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Userform und Textboxen

Forumthread: Userform und Textboxen

Userform und Textboxen
06.06.2024 00:54:12
Kalla
Hallo Herbers Excel Forum
Ich hoffe hier Hilfe zubekommen. Ich habe eine Userform erstellt mit 500 Textboxen. Jetzt möchte ich gerne in der geöffneten Userform, mit dem Mousezeiger entweder per click oder mousedown, das ein X in irgendeiner Textbox, egal welche, erscheint. Dies soll so lange geschehen, bis die Userform wieder geschlossen wird. Ich weiss ich kann für jede einzelne Textbox den Code erstellen
Private Sub TextBox1_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
TextBox1.Value = "x"
TextBox1.Font.Size = 12
End Sub
Kann man das irgendwie anders lösen, als 500 mal den oben genannten Code zu kopieren und abändern ? Mit Klassen kenne ich mich nicht aus, sollte es damit funktionieren
Vielen Dank für eure mögliche Hilfe oder auch andere Miteilungen
Gruss Kalla
Anzeige

6
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Userform und Textboxen
06.06.2024 01:01:22
Onur
Wozu brauchst du 500 TextBoxen?
AW: Userform und Textboxen
06.06.2024 05:46:41
Beverly
Hi,

mal abgesehen vom Sinn eines UserForms mit 500 TextBoxen, aber du hast Recht, das geht nur mit Klassenprogrammierung. Ich habe mal ein Beispiel erstellt und den Code mit Kommentaren versehen - vielleicht hilft es dir ja weiter. Beachte: wenn du den Code in deine Mappe übernimmst - alle Module und Variablen-Bezeichnungen sind aufeinader abgestimmt und deshalb sind der komplette Code und auch der Klassenmodul-Name zu übernehmen.

https://www.herber.de/bbs/user/169876.xlsm

Bis später
Karin

Link zur Homepage: https://excel-inn.de/
Anzeige
AW: Userform und Textboxen
06.06.2024 08:26:43
daniel
Hi
es gäbe auch eine Lösung ohne Klassenprogrammierung:

1. lege ein Label über alle Textboxen. mach das Label transparent, damit man die darunter liegenden Textboxen sehen kann.
2. laufe im MouseUp (oder MouseDown) - Event per Schleife über alle Controls und prüfe, welche Textbox sich unter dem Klickpunkt befindet und schriebe in die ermittelte Textbox das X

also prinzipiell etwa so im MouseUp des Labels
wenn das Label nicht direkt in der oberen Linken Ecke liegt, muss muss man X und Y noch verschieben
(Y + Label1.Top, X + Label1.Left)
for each crt in me.controls

if crt.Top Y then
if crt.Top + crt.Height > Y then
if crt.Left > X then
if crt.Left + crt.Witdh X then
crt.Text = crt.Text & "x"
exit for
end if
end if
end if
end if
next


Gruß Daniel
Anzeige
AW: Userform und Textboxen
06.06.2024 09:29:05
Alwin Weisangler
Hallo,

ich war mal so dreist und habe in Beverlys Code die Klassenvariablen auf Private gesetzt und den Variablenzugriff via Property angelegt. Das hat den Vorteil, dass im Falle eines Fehlers, welcher wo auch immer passiert, die Klasse stabil(er) bleibt.
Public-Variablen verlieren im Falle eines Fehlers ihren Inhalt.
Ich weiß es ist eine eher philosophische Sache.

Klassenmodul:


Option Explicit
Private WithEvents m_clTextBox As MSForms.TextBox 'Variable zur Ansprache jeder TextBox die im Container enthalten ist

Property Set clTextBox(ByVal objTxt As MSForms.TextBox)
Set m_clTextBox = objTxt
End Property

Private Sub m_clTextBox_MouseDown(ByVal BclTextBox As Integer, ByVal Shift As Integer, ByVal X As Single, ByVal Y As Single)
m_clTextBox.Value = "x"
End Sub


ins Modul des Userforms:


Option Explicit
Private clsTextBoxen() As New clsTextBox 'Variable als Container für die TextBox-Klasse
Dim coElement As Control 'Variable um TextBoxen von anderen Steuerelemente zu unterscheiden

Private Sub UserForm_Initialize()
Dim inZaehler As Integer
' Schleife über alle Steuerelemente
For Each coElement In Me.Controls
' Steuerelemnt ist eine TextBox
If TypeName(coElement) = "TextBox" Then
' Schrifgtöße 12
coElement.FontSize = 12
' Container neu dimensionieren
ReDim Preserve clsTextBoxen(0 To inZaehler)
' TextBox in den Containrt aufnehmen
Set clsTextBoxen(inZaehler).clTextBox = coElement
inZaehler = inZaehler + 1
End If
Next coElement
End Sub

Die Dimensionierung der Public Variable muss natürlich aus dem allgemeinen Modul entfernt werden.
Public Variablen vermeide ich im Zusammenhang mit Klassen so gut es irgendwie geht. Es ist natürlich nur meine persönliche Sicht zur Sache.
https://www.herber.de/bbs/user/169877.xlsm

Gruß Uwe
Anzeige
AW: Userform und Textboxen
06.06.2024 11:20:51
Kalla
Hallo an Alle
Danke für eure schnelle Hilfe. Ich werde heute im laufe des Tages eure Vorschläge umsetzen.
Melde mich dann wieder.
Gruss Kalla
AW: Userform und Textboxen
06.06.2024 15:57:45
Kalla
Hallo an Alle
Vielen Dank an Karin und Uwe, mit euren Code hab ich es hinbekommen. Gut erklärt und beschrieben, auch mit den Klassen.
Genauso habe ich es mir vorgestellt. Danke auch Daniel für deine Überlegungen.
Damit ist meine Frage beantwortet.
Gruss Lutz
Anzeige
;

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige