Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1892to1896
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

Hilfe beim VBA-Code

Hilfe beim VBA-Code
19.08.2022 15:38:35
Marc
Hallo zusammen
Ich habe einen VBA-Code gefunden, welcher mir 3 Comboboxen befüllt. Ich habe diesen nun versucht abzuändern, dass die ausgewählten Werte in eine Tabelle geschrieben werden. Jedoch dauert nun dadurch der Vorgang zum starten sehr lange. Wäre es möglich dies zu ändern, damit die Werte erst beim klick auf einen Ok-Butten in der Userform in die Tabelle geschrieben wird?
Versucht habe ich dies mit folgendem Code am Schluss.
Application.ScreenUpdating = False
Worksheets("Tabelle1").Range("A1") = ComboBox1
Worksheets("Tabelle1").Range("A2") = ComboBox2
Worksheets("Tabelle1").Range("A3") = ComboBox3
Application.ScreenUpdating = True
Vielen Dank für die Hilfe.
Beste Grüsse
Marc

Option Explicit
Const lSTARTZEILE As Long = 6
Private Sub UserForm_Initialize()
Call FillComboBox1
End Sub
Private Sub FillComboBox1()
Call MWFillComboBoxFromTableColumn(Personaldaten, 32, ComboBox1)
If ComboBox1.ListCount >= 1 Then ComboBox1.ListIndex = 0
End Sub
'Ereignisroutine, wenn sich ComboBox1 verändert -> ComboBox2 und 3 neu füllen
Private Sub ComboBox1_Change()
ComboBox3.Clear
ComboBox2.Clear
If ComboBox1.ListIndex = -1 Then Exit Sub
Call MWFillComboBoxFromTableColumn(Personaldaten, 1, ComboBox2, 32, ComboBox1.Text)
If ComboBox2.ListCount >= 1 Then ComboBox2.ListIndex = 0
End Sub
'Ereignisroutine, wenn sich ComboBox2 verändert -> ComboBox3 neu füllen
Private Sub ComboBox2_Change()
ComboBox3.Clear
If ComboBox2.ListIndex = -1 Then Exit Sub
Call MWFillComboBoxFromTableColumn(Personaldaten, 2, ComboBox3, 32, ComboBox1.Text, 1, ComboBox2.Text)
If ComboBox3.ListCount >= 1 Then ComboBox3.ListIndex = 0
End Sub
Private Sub MWFillComboBoxFromTableColumn(ByRef oSheet As Object, _
ByVal lColumn As Long, ByRef oComboBox As Object, _
Optional ByVal lColBedingung1 As Long = 0, Optional ByVal sBedingung1 As String = "", _
Optional ByVal lColBedingung2 As Long = 0, Optional ByVal sBedingung2 As String = "")
Dim z As Long
Dim zMax As Long
Dim bFlag As Boolean
oComboBox.Clear
zMax = oSheet.UsedRange.Row + oSheet.UsedRange.Rows.Count - 1
For z = lSTARTZEILE To zMax
If Trim(CStr(oSheet.Cells(z, lColumn).Value))  "" Then
bFlag = True
If lColBedingung1  0 Then
If LCase(Trim(CStr(oSheet.Cells(z, lColBedingung1))))  LCase(Trim(sBedingung1)) Then
bFlag = False
End If
End If
If lColBedingung2  0 Then
If LCase(Trim(CStr(oSheet.Cells(z, lColBedingung2))))  LCase(Trim(sBedingung2)) Then
bFlag = False
End If
End If
If bFlag = True Then
Call MWFillNonDuplicatesToComboBox(oComboBox, oSheet.Cells(z, lColumn).Value)
End If
End If
Next z
End Sub
Private Sub MWFillNonDuplicatesToComboBox(ByRef oComboBox As Object, ByVal sAddText As String)
Dim i As Long
Dim bFlag As Boolean
If oComboBox.ListCount = 0 Then
oComboBox.AddItem sAddText
Else
bFlag = False
For i = 0 To oComboBox.ListCount - 1
If LCase(Trim(CStr(oComboBox.List(i)))) = LCase(Trim(CStr(sAddText))) Then
bFlag = True
Exit For
End If
Next i
If bFlag = False Then
oComboBox.AddItem sAddText
End If
End If
Application.ScreenUpdating = False
Worksheets("Tabelle1").Range("A1") = ComboBox1
Worksheets("Tabelle1").Range("A2") = ComboBox2
Worksheets("Tabelle1").Range("A3") = ComboBox3
Application.ScreenUpdating = True
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Hilfe beim VBA-Code
19.08.2022 17:23:38
christian
Bei mir geht der Code.
Hast du eventuell Textbox anstelle von Combobox in der Userform?
AW: Hilfe beim VBA-Code
23.08.2022 09:27:34
Marc
Vielen Dank für die Antwort und entschuldige die späte Rückmeldung. Nein, ich habe hier wirklich Comboboxen. Der Code funktioniert aber es dauert sehr lange und das eigentlich nur betreffend diesen 3 Zeilen. Kann ich das irgendwie schneller machen?

Worksheets("Tabelle1").Range("A1") = ComboBox1
Worksheets("Tabelle1").Range("A2") = ComboBox2
Worksheets("Tabelle1").Range("A3") = ComboBox3
Vielen Dank und Gruss
Marc
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige