Ich will mit VBA eine Listbox mit einer Auswahl zwischen "Ja" und "Nein" erstellen.
Der VBA Recorder nimmt bei Daten->Datenüberprüfung->Datenüberprüfung...->Liste-> "Ja;Nein" _ Eingabe folgendes Makro auf:
Sub Makro3()
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Ja;Nein"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Es wird korrekt die markierte Zelle mit der Auswahl "Ja" und "Nein" hinterlegt.
Soweit so gut.
Ich habe das ganze nun etwas angepasst, um die Tabelle und die zu befüllende Zelle dynamisch zu generieren:
'hier die aufrufende Test Prozedur
Sub TEST_sub_g_ListboxEintragenMitJaNeinAuswahl()
Dim a As Long
a = 4
Call sub_g_ListboxEintragenMitJaNeinAuswahl(Workbooks("Abgleich.xlsm").Sheets("Tabelle3"), _
_
a, 4)
End Sub
'in der übergebenen Tabelle und Zelle wird eine Listbox mit der Auswahl Ja, Nein erstellt. _ Optional kann "Ja" als befüllter default Wert angegeben werden. Wird nichts angegeben ist "Nein" als default Wert hinterlegt
Sub sub_g_ListboxEintragenMitJaNeinAuswahl(wks As Worksheet, lngRow As Long, lngColumn As Long, _
_
Optional strAuswahl As String = "Nein")
With wks.Cells(lngRow, lngColumn)
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Ja,Nein"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
.Value = strAuswahl
End With
End Sub
So jetzt der Mist an der Sache... Wenn ich Formula1:="Ja;Nein" mit einem Semikolon aufgebe, wie es der Makro Recorder aufnimmt, kriege ich nicht die Auswahl "Ja" und "Nein, sondern nur "Ja;Nein" als einzige Auswahlmöglichkeit.
Gebe ich es mit einem Komma auf: Formula1:="Ja,Nein" klappt es, wenn ich die Listbox auf dem leeren Tabellenblatt Tabelle3 per angepasstem Makro anlege.
Führe ich es aber mit unverändertem Code auf einem anderen Tabellenblatt aus (Nur das an die Prozedur übergebende Worksheet ist diesmal ein anderes, Kriege ich nicht "Ja" und "Nein", sondern "Ja,Nein" als einzige Auswahl....
Hier die der Aufruf der Prozedur:
Call sub_g_ListboxEintragenMitJaNeinAuswahl(Workbooks("Abgleich.xlsm").Sheets("Zusammenfassung_Infotexte"), lngZeile, 27)
lngZeile ist dabei eine Variable mit der betroffenen Zeilennummer. In der betroffenen Zelle wird ja auch die Listbox angelegt, an den aufrufenden Parametern liegt es aus meiner Sicht also nicht.
Sub sub_g_ListboxEintragenMitJaNeinAuswahl(wks As Worksheet, lngRow As Long, lngColumn As Long, _
_
Optional strAuswahl As String = "Nein")
With wks.Cells(lngRow, lngColumn)
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="Ja,Nein"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
.Value = strAuswahl
End With
End Sub
Der einzige Unterschied aus meiner Sicht ist, dass im einen Fall in Tabelle3 in einer Zelle die Listbox anlegt (wo dann "Ja" und "Nein" angezeigt wird) und im 2. Fall in Tabelle "Zusammenfassung_Infotexte" die Listbox angelegt werden soll (wo dann mit dem selben Code auf einmal "Ja,Nein" die einzige Auswahl in der Listbox ist....Hoffe mir kann jemand weiterhelfen.
Gruß Martin