Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1884to1888
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
VBA Userform change?
09.06.2022 16:11:30
Herbert
Guten Tag,
gibt es einen Sub, welcher den im Betreff formulierten Text darstellt?
Ich habe 60 Textboxen, die ich wenn eine davon mit einer Zahl gefüllt wird,
in dem Label davor die Summe angezeigt wird,
jetzt möchte ich aber nicht für jede Textbox einzeln den Code benutzen,
dann hätte ich im Endeffekt 60mal den gleichen Code.

lbl_S_1.Caption = WorksheetFunction.Sum(Val(txtbx_M_1.Text), Val(txtbx_F_1.Text), Val(txtbx_Vw_1.Text), Val(txtbx_Vt_1.Text))
Das wäre der Code den ich bei jeder TextBox beim change benutzen müsste,
sonst würde ich über eine Schleife einfach die Zahlen dahinter immer ändern und hätte das ganze in einem Code.
Gibt es eine Möglichkeit nach jedem verlassen einer TextBox,
das sich die Userform aktualisiert?
Danke an jeden der Hilft.
MfG
Herbert

19
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: VBA Userform change?
09.06.2022 16:27:20
Daniel
Hi
das geht sogar ganz ohne Code:
- verknüpfe jede Textbox mit einer Ausgabezelle auf einem Tabellenblatt. Trage hierzu die Zelladresse (ggf mit Tabellenblattname davor) in die Eigenschaft ControlSource ein (in der Form: 'Tabelle1'!A1)
wähle für jede Textbox eine andere Zelle am besten in einer Spalte untereinander liegend
- bilde in einer weiteren Zelle per Formel die Summe über die Ausgabezellen der Textboxen
- Verwende für die Ausgabe eine Listbox und verknüpfe über diese die Eigenschaft RowSource mit der Zelle mit der Summenformel (auch wieder: Zelladresse mit Tabellenblatt angeben)
Listbox ist für die Ausgabe hier das beste Steuerelement, weil man es ähnlich wie eine Textbox mit einer Zelle verknüpfen kann, aber es ist "ReadOnly", dh der Anwender kann nichts eingeben. Bei einer Textbox ist die Verknüpfung lesend und schreibend, dh sobald der Anwender in die Ausgabetextbox klicken würde, würde die in der verknüpften Zelle stehende Formel mit dem Wert überschrieben.
Labels kann man nicht mit einer Zelle verknüpfen, daher können sie nur feste Werte anzeigen. (oder müssen per Code geändert werden)
über die verschiedenen Eigenschaften (SpecialEffect, BorderStyle, BackColor) kannst du aber auch die Listbox so aussehen lassen wie ein Label.
Gruß Daniel
Anzeige
AW: VBA Userform change?
09.06.2022 16:46:47
Herbert
Moin Daniel,
ich glaube du bist davon ausgegangen,
dass das Summen Label sich im tabellenblatt befindet,
aber das soll alles auf der Userform bleiben.
Hätte sonst noch eine Methode mit KlassenModulen gefunden,
nur kenn ich mich mit 0% aus.
Stackoverflow: https://stackoverflow.com/questions/5940596/excel-vba-userform-execute-sub-when-something-changes
Das wäre das was ich gefunden habe,
aber die Umsetzung auf mein Problem bei dem Code fällt mir echt schwer (gar unmöglich).
MfG
Herbert
Anzeige
AW: VBA Userform change?
09.06.2022 17:04:34
Daniel
nö, das passt schon.
die Textboxen und Listbox mit Ausgabezellen zu verknüpfen funktioniert auch in einer Userform.
(mit Tabellenblatt-Steuerelementen würden die Eigenschaften auch nicht ControlSource und RowSource heißen, sondern LinkedCell und ListfillRange)
und wie gesagt, diese Methode löst die gestellte Aufgabe ohne eine einzige Zeile VBA-Code und sollte somit deinem Kenntnisstand entgegen kommen.
natürlich kannst du das auch verwenden, um dich in das Thema Klassenprogrammierung einzuarbeiten, aber notwendig ist das nicht.
Gruß Daniel
AW: VBA Userform change?
09.06.2022 16:34:10
Fennek
Hallo,
für viele TextBoxen einer UserForm geht:

Private Sub UserForm_Click()
Dim Tbx As TextBox, Ctl As Control
For Each Ctl In Me.Controls
If InStr(1, Ctl.Name, "TextBox", vbBinaryCompare) > 0 Then ret = ret + Val(Ctl)
Next Ctl
Debug.Print ret
End Sub
>/pre>
mdf

Anzeige
AW: VBA Userform change?
09.06.2022 16:41:30
Daniel
Dann bekommst du das Ergebnis aber erst, wenn du auf die leere Fläche der Userform klickst.
Userform_Klick gilt nicht für alle Steuerelemente der Userform, sondern nur für das Element Userform selbst.
Gruß Daniel
AW: VBA Userform change?
09.06.2022 16:51:32
Nepumuk
Hallo Herbert,
das geht mit einer Klasse der Textboxen, mit relativ geringem Aufwand. Lade deine Mappe hoch dann baue ich dir das ein.
Gruß
Nepumuk
Das wäre sehr nett! ^^
09.06.2022 16:59:30
Herbert
Moin Nepumuk,
hier die Beispiel Datei mit selbem Code:

Die Datei https://www.herber.de/bbs/user/153494.xlsm wurde aus Datenschutzgründen gelöscht


In dem VBA Code sind 3 Zeilen als Text formatiert,
dort ist txtbx_M_1_change(),
das der Weg womit man es 60mal machen müsste... . :D
Vielen vielen Dank schonmal im Voraus! ^^
MfG
Herbert
Anzeige
Wie hast du den Code für diese Userform
09.06.2022 17:13:09
Daniel
mit deinem angegeben Kenntnisstand erstellt?
der Code, den du da hast, ist definitiv nicht "Kaum Excel/VBA-Kenntnisse".
solltest du dir das irgendwo zusammenkopiert haben, solltet du das ehrlicherweise dazuschreiben.
Gruß Daniel
Perfekt, ich danke dir!
10.06.2022 14:16:56
Herbert
Moin Nepumuk,
vielen vielen Dank hast mein Wochenende gerettet! ^^
MfG
Herbert
& ein schönes Wochenende dir
Kleinigkeit dazu?
13.06.2022 09:47:24
Herbert
Guten Morgen allerseits,
ist es möglich, wenn ich enter drücke ohne eine Ziffer in eine der Textboxen einzugeben,
das diese als Wert 0 gewertet wird?
Ansonsten würde ich nämlich einen Fehler an dieser Stelle bekommen, sobald ich Enter in einer leeren Zelle drücke:

Private Sub mobjRaiseClass_Calculate(ByVal pvlngIndex As Long)
Controls("lbl_S_" & CStr(pvlngIndex)).Caption = Application.Sum(Val(Controls("txtbx_M_" & CStr(pvlngIndex)).Text), _
Val(Controls("txtbx_F_" & CStr(pvlngIndex)).Text), Val(Controls("txtbx_Vw_" & CStr(pvlngIndex)).Text), Val(Controls("txtbx_Vt_" & CStr(pvlngIndex)).Text))
End Sub
Danke schon einmal für eure Hilfen!
MfG
Herbert
Anzeige
AW: Kleinigkeit dazu?
13.06.2022 11:14:36
GerdL
Guten Morgen Herbert,
probiers mal so:

Private Sub mobjRaiseClass_Calculate(ByVal pvlngIndex As Long)
Controls("lbl_S_" & CStr(pvlngIndex)).Caption = _
Application.Sum(Val(Replace(Controls("txtbx_M_" & CStr(pvlngIndex)).Text, "", 0)), _
Val(Replace(Controls("txtbx_F_" & CStr(pvlngIndex)).Text, "", 0)), _
Val(Replace(Controls("txtbx_Vw_" & CStr(pvlngIndex)).Text, "", 0)), _
Val(Replace(Controls("txtbx_Vt_" & CStr(pvlngIndex)).Text, "", 0)))
End Sub
Gruß Gerd
AW: Kleinigkeit dazu?
13.06.2022 12:08:04
Nepumuk
Hallo Herbert,
die Val -Funktion wandelt einen leeren String automatisch in 0 um, da brauchst du nichts ändern. Oder bekommst du eine Fehlermeldung?
Gruß
Nepumuk
Anzeige
AW: Kleinigkeit dazu?
13.06.2022 16:50:25
Herbert
Guten "Abend" Nepumuk,
ja also wenn ich enter drücke in einem leeren feld sollte er die summe zusammen rechnen,
aber wenn ich in die nächste "Zeile" gehe in der Userform, und dort enter drücke, ob mit oder ohne wert in der Textbox, gibt er mir einen Fehler aus.
MfG
Herbert
AW: Kleinigkeit dazu?
13.06.2022 16:56:39
Nepumuk
Hallo Herbert,

aber wenn ich in die nächste "Zeile" gehe in der Userform
Wie gehst du in die nächste Zeile?
Ich kann keinen Fehler erzeugen. Wie lautet den die Fehlermeldung und welche Nummer hat sie, welche Programmzeile markiert der Debugger?
Gruß
Nepumuk
Anzeige
AW: Kleinigkeit dazu?
13.06.2022 17:00:39
Herbert
So,
Den kompletten Sub abgsehen vom Titel und End Sub:

Private Sub mobjRaiseClass_Calculate(ByVal pvlngIndex As Long)
In der Userform ist der Code.
In die nächste Zeile springe ich über Enter.
MfG
Herbert
AW: Kleinigkeit dazu?
13.06.2022 17:05:36
Nepumuk
Hallo Herbert,
lade mal die Mappe hoch (Daten müssen keine drin sein) damit ich das nachvollziehen kann.
Gruß
Nepumuk
Fehlercode + Codeteil
15.06.2022 08:29:18
Herbert
Moin Nepumuk,
in den letzten Tagen war ein wenig stress bei mir,
der Fehlercode den ich auf den Codeteil erhalte:
Fehlercode:

Laufzeitfehler '-2147024809 (80070057)
Das angegebene Objekt konnte nicht gefunden werden.
Codeteil:

Private Sub mobjRaiseClass_Calculate(ByVal pvlngIndex As Long)
Controls("lbl_S_" & CStr(pvlngIndex)).Caption = Application.Sum(Val(Controls("txtbx_M_" & CStr(pvlngIndex)).Text), _
Val(Controls("txtbx_F_" & CStr(pvlngIndex)).Text), Val(Controls("txtbx_Vw_" & CStr(pvlngIndex)).Text), Val(Controls("txtbx_Vt_" & CStr(pvlngIndex)).Text))
End Sub
Eine Beispieldatei würde ich im laufe des Tages reinschicken,
muss eben alle relevanten Daten aus den Tabellen entfernen.
MfG
Herbert
Anzeige
AW: Fehlercode + Codeteil
15.06.2022 08:38:28
Herbert
Ich nochmal...,
hab es gerade herausgefunden,
ich hatte zwei von den Labels nicht nach dem Generellen Name bennant...,
funktioniert einwandfrei.
Vergiss den Fehler! ^^
Und danke nocheinmal für deinen Einsatz Nepumuk! ^^
Schönen Tag noch,
vielleicht melde ich mich im laufe des Tages mit einem neuen Problem,
versuche die Mappe heute oder morgen abzuschließen.
MfG
Herbert ^^

301 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige