Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1880to1884
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
Inhaltsverzeichnis

Code schneller und übersichtlicher

Code schneller und übersichtlicher
19.04.2022 17:03:24
Thomas
Hallo,
ich habe in einem Rahmen auf einem Userform 35 Checkboxen, deren Status sich aufgrund einer Auswahl aus einem Suchfeld aus einem Tabellenblatt mit 35 Spalten füllen sollen. In den Zellen steht entweder Text oder sind leer, wenn die Zellen leer sind, wäre der Status = False und ansonsten True.
Ich hab das zwar jetzt so gelöst und das funktioniert auch, aber ist nicht wirklich elegant, das könnte man bestimmt besser lösen.

Private Sub TextBox1_Change()
Dim WkS As Worksheet
Dim rZelle As Range
Set WkS = ThisWorkbook.Worksheets("Tabelle1")
With WkS.Columns(1)
Set rZelle = .Find(TextBox1.Value, lookat:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Or Empty Then
If WkS.Cells(rZelle.Row, 2).Value  "" Then
chkKA = True
Else
chkKA = False
End If
If WkS.Cells(rZelle.Row, 3).Value  "" Then
chkBB = True
Else
chkBB = False
End If
If WkS.Cells(rZelle.Row, 4).Value  "" Then
chkFB = True
Else
chkFB = False
End If
End If
End With
End Sub
Im Anhang die Beispielmappe mit nur 3 Checkboxen und entsprechend kleinerer Tabelle, normalerweise sind es wie eingang geschrieben 35 zu füllende Checkboxen und entsprechend auch Spalten.
Danke
https://www.herber.de/bbs/user/152523.xlsm

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Code schneller und übersichtlicher
19.04.2022 17:12:14
Nepumuk
Hallo Thomas,
teste mal:

Private Sub TextBox1_Change()
Dim rZelle As Range
Dim lngRow As Long
With ThisWorkbook.Worksheets("Tabelle1")
Set rZelle = .Columns(1).Find(What:=TextBox1.Value, LookAt:=xlWhole, LookIn:=xlValues)
If Not rZelle Is Nothing Then
lngRow = rZelle.Row
chkKA.Value = Not IsEmpty(.Cells(lngRow, 2).Value)
chkBB.Value = Not IsEmpty(.Cells(lngRow, 3).Value)
chkFB.Value = Not IsEmpty(.Cells(lngRow, 4).Value)
End If
End With
End Sub
Gruß
Nepumuk
AW: Code schneller und übersichtlicher
20.04.2022 05:17:08
Thomas
Hallo Nepumuk,
Danke, aber damit klappt es leider nicht, es wird dann immer alles True gesetzt auch wenn in der entsprechenden Zelle nichts steht, was komisch ist
Anzeige
AW: Code schneller und übersichtlicher
20.04.2022 05:20:10
Nepumuk
Hallo Thomas,
stehen das Formeln in den Zellen die "" ausgeben?
Gruß
Nepumuk
AW: Code schneller und übersichtlicher
20.04.2022 05:35:56
Thomas
Morgen,
nein da stehen keine Formeln drin, ist aber eine "dynamische" Tabelle, kann es daran liegen?
Aufgrund deines Code Beispiels ist mir aber auch die idee gekommen, das einfach in ein Einzeiliges IF zu ändern, so wird es dann ja auch schon deutliche übersichtlicher.

If WkS.Cells(rZelle.Row, 2).Value  "" Then chkKA = True Else chkKA = False
If WkSe.Cells(rZelle.Row, 3).Value  "" Then chkBB = True Else chkBB = False
If WkS.Cells(rZelle.Row, 4).Value  "" Then chkFB = True Else chkFB = False
Das scheint so zu funktionieren und zumindest bemerk ich bis jetzt auch keine negativen Auswirkungen auf die Performance
Anzeige
AW: Code schneller und übersichtlicher
20.04.2022 05:42:46
Nepumuk
Hallo Thomas,
dann so (ganz ohne Abfrage):

chkKA.Value = Not .Cells(lngRow, 2).Value = vbNullStrting
chkBB.Value = Not .Cells(lngRow, 3).Value = vbNullStrting
chkFB.Value = Not .Cells(lngRow, 4).Value = vbNullStrting
Gruß
Nepumuk
AW: Code schneller und übersichtlicher
20.04.2022 06:02:58
Thomas
Hi Nepumuk,
ja so klappt es.
Gibt es außer was die übersicht angeht einen Vorteil ohne das IF Then?
Danke für deine Hilfe
MFG
Thomas
AW: Code schneller und übersichtlicher
20.04.2022 06:07:34
Nepumuk
Hallo Thomas
eine Abfrage kostet immer Zeit, und da eine CheckBox sowieso nur die Werte True oder False annehmen kann, ist es naheliegend dies aus dem Zellinhalt zu erzeuegn.
Gruß
Nepumuk
Anzeige
AW: Code schneller und übersichtlicher
20.04.2022 06:27:59
Thomas
Hallo Nepumuk,
super danke für die aufklärung, dann werde ich es entsprechend anpassen.
MFG
Thomas
AW: Code schneller und übersichtlicher
21.04.2022 05:28:07
Thomas
Hallo Nepumuk,
ich hab es jetzt mit vbNullString eingebaut und es funktioniert auch genau wie es soll, dafür vielen Dank.
Allerdings ist mir noch nicht klar wieso vbNullString zum erfolg führt und not isEmpty nicht, bzw, anstatt von vbNullString funktioniert auch "", aber wo genau ist der Unterschied und der Vorteil von vbNullString
Danke
AW: Code schneller und übersichtlicher
20.04.2022 11:47:28
snb
Du verwendest ein TextBox für Zahlen. Ein Spinbutton ist mehr geeignet.
Du verwendest Checkboxes wo ein ListBox mehr geeignet ist.
Es wäre besser ein Array zu benützen
https://www.herber.de/bbs/user/152541.xlsb
AW: Code schneller und übersichtlicher
21.04.2022 05:10:11
Thomas
Hallo SNB,
was meinst du damit?

Du verwendest ein TextBox für Zahlen. Ein Spinbutton ist mehr geeignet.
Du verwendest Checkboxes wo ein ListBox mehr geeignet ist.
Es wäre besser ein Array zu benützen
Wo ging es hier um eine Textbox für Zahlen? Wenn du die Textbox auf dem Formular meinst, dann hast du ja gesehen das die Alphanumerisch sind die Eingaben, natürlich könnte man das auch mit einer Combobox lösen aber für mein Vorhaben ist die Textbox da besser geeignet.
Wieso meinst du hier wäre eine Listbox geeigneter? Wie sollte das aussehen?
Ein Array wofür nutzen?
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige