Fehlerbehebung bei „Zugriff verweigert“ in der VBA-ComboBox
Schritt-für-Schritt-Anleitung
-
Öffne die Userform: Stelle sicher, dass Deine Userform mit der ComboBox (CB0) korrekt eingerichtet ist.
-
Überprüfe den Code: Verwende den folgenden VBA-Code, um die ComboBox mit Werten zu füllen, basierend auf der Auswahl eines Optionsbuttons:
Private Sub OBA2_Change()
Dim iZeile As Long
' Prozedur für CB0-Change stoppen
ChangeBloc = True
' Prüfung, ob Auswahl getroffen für Filterung auf ADM
If OBA2.Value = True Then
' Setze RowSource auf leer
CB0.RowSource = ""
' gehe alle Zeilen in dem Datenblatt KSE von 2 bis zum letzten Eintrag durch
For iZeile = 2 To Worksheets("KSE").Cells(Rows.Count, 1).End(xlUp).Row
' wenn der Eintrag in KSE Spalte 5 (E = ADM-Name) identisch mit dem User der Datei,
If Worksheets("KSE").Cells(iZeile, 5) = Worksheets("Basic").Cells(3, 2) Then
' dann übernehme den Wert aus Spalte 11 (Kundennamen) für die Combobox
CB0.AddItem Cells(iZeile, 11)
End If
Next iZeile
End If
End Sub
-
Testen: Führe die Userform aus und wähle den Optionsbutton aus. Die ComboBox sollte nun korrekt mit den Kundennamen gefüllt werden.
Häufige Fehler und Lösungen
-
Fehler: Zugriff verweigert!: Dieser Fehler tritt häufig auf, wenn die RowSource der ComboBox nicht korrekt gesetzt ist. Stelle sicher, dass Du die RowSource vor dem Hinzufügen von Elementen auf leer setzt.
-
Keine Elemente in der ComboBox: Wenn nach dem Ausführen des Codes keine Elemente in der ComboBox angezeigt werden, überprüfe, ob die Bedingungen im If-Statement korrekt sind und ob die Daten im Arbeitsblatt stimmen.
Alternative Methoden
Eine alternative Methode zur Befüllung der ComboBox könnte die Verwendung von Arrays sein. Dies könnte in bestimmten Fällen die Performance verbessern, insbesondere wenn viele Daten vorhanden sind.
Private Sub OBA2_Change()
Dim iZeile As Long
Dim KundenArray() As String
Dim Count As Long
If OBA2.Value = True Then
' Setze RowSource auf leer
CB0.RowSource = ""
' Durchlaufe die Daten und fülle das Array
Count = 0
For iZeile = 2 To Worksheets("KSE").Cells(Rows.Count, 1).End(xlUp).Row
If Worksheets("KSE").Cells(iZeile, 5) = Worksheets("Basic").Cells(3, 2) Then
ReDim Preserve KundenArray(Count)
KundenArray(Count) = Cells(iZeile, 11)
Count = Count + 1
End If
Next iZeile
' Fülle die ComboBox mit dem Array
For i = LBound(KundenArray) To UBound(KundenArray)
CB0.AddItem KundenArray(i)
Next i
End If
End Sub
Praktische Beispiele
Wenn Du eine Userform zur Verwaltung von Kunden hast, kannst Du den oben genannten Code verwenden, um die ComboBox dynamisch mit Kundennamen zu füllen. Dies ist besonders nützlich in Formularen, wo der Benutzer aus einer Liste von Kunden auswählen muss.
Tipps für Profis
-
Verwende Fehlerbehandlung: Implementiere On Error Resume Next und On Error GoTo 0, um Fehler während der Ausführung abzufangen und zu behandeln.
-
Optimierung: Wenn Du große Datenmengen hast, erwäge, die Sichtbarkeit der Userform zu deaktivieren, während die ComboBox gefüllt wird, um die Benutzererfahrung zu verbessern.
FAQ: Häufige Fragen
1. Warum bekomme ich den Fehler „Zugriff verweigert“ beim Hinzufügen von Elementen zur ComboBox?
Dieser Fehler tritt auf, wenn die RowSource der ComboBox nicht richtig gesetzt ist. Stelle sicher, dass Du sie auf leer setzt, bevor Du mit AddItem arbeitest.
2. Kann ich die ComboBox auch mit Daten aus einer anderen Quelle befüllen?
Ja, Du kannst auch Daten aus einer Datenbank oder einer anderen Excel-Datei verwenden, indem Du die entsprechenden Verbindungs- und Abfrageoptionen in VBA nutzt.