AW: Auswahl in ComboBox nur mit angezeigten Spalten
19.08.2010 15:58:10
fcs
Hallo Rainer,
irgendwie ist mir die von dir gewünschte Reihenfolge unklar, in der die die Userforms angezeigt werden sollen.
Wenn du in einer Combobox oder Listbox nicht alle Datenanzeigen willst, dann kannst du nicht mehr den gesamten Zellbereich in ein Array laden und der Box als Auswahlliste zusweisen.
Bei kleineren Listen ist dann die einfachste Methode die gewünschten Einträge auf Basis von Kriterien per AddItem-Methode den Boxen zuzuweisen. Zusätzlich sollte man in einer weiteren Spalte der Box (ColumnWidths-Wert für diese Spalte dann auf null setzen) die Spalte oder Zeile im Tabellenblatt speichern in aus der der Wert eingelesen wurde. So hat man bei Auswahl von Listeneinträgen diese zur Verfügung
Gruß
Franz
'Code frmAuswahl
Private icolL As Integer
Private Sub CommandButton1_Click()
' Cells(2, 7) = "Test" 'Cells(1, (8 + Me.ComboBox1.ListIndex))
With Range(Cells(7, 7), Cells(7, icolL)) 'Bereich mit ja-Einträgen
'vorhandene Ja's löschen
.ClearContents
'Ja's in Zeile 7 setzen
If Me.ComboBox1.ListIndex -1 Then .Cells(1, Me.ComboBox1.ListIndex + 1).Value = "ja"
If Me.ComboBox2.ListIndex -1 Then .Cells(1, Me.ComboBox2.ListIndex + 1).Value = "ja"
If Me.ComboBox3.ListIndex -1 Then .Cells(1, Me.ComboBox3.ListIndex + 1).Value = "ja"
End With
Unload Me
frmProducts.Show
End Sub
Private Sub UserForm_Initialize()
Dim meAr
icolL = GetLastColumn() - 2
With Sheets("vergleich")
meAr = .Range(.Cells(19, 7), .Cells(24, icolL)) 'Dein Bereich
End With
With Me.ComboBox1
.Text = Cells(25, 7)
.ColumnCount = 6
.ColumnWidths = "65Pt;65Pt;65Pt;0Pt;0Pt;20Pt"
.List = Application.Transpose(meAr)
End With
With Me.ComboBox2
.Text = Cells(25, 7)
.ColumnCount = 6
.ColumnWidths = "65Pt;65Pt;65Pt;0Pt;0Pt;20Pt"
.List = Application.Transpose(meAr)
End With
With Me.ComboBox3
.Text = Cells(25, 7)
.ColumnCount = 6
.ColumnWidths = "65Pt;65Pt;65Pt;0Pt;0Pt;20Pt"
.List = Application.Transpose(meAr)
End With
End Sub
'Code frmProducts
Option Explicit
Private Sub cmdCancel_Click()
Unload Me
End Sub
Private Sub cmdOK_Click()
Dim iLst As Integer
'gewählte Spalten einblenden
For iLst = 0 To lstProdukte.ListCount - 1
If lstProdukte.Selected(iLst) Then
Columns(CLng(lstProdukte.List(iLst, 1))).Hidden = False
Else
'in nicht gewählten Spalten "ja" löschen
Cells(7, CLng(lstProdukte.List(iLst, 1))).ClearContents
End If
Next iLst
Unload Me
End Sub
Private Sub cmdTOP_Click()
Unload Me
' frmTOP.Show '? Userform gibt es nicht
End Sub
Private Sub UserForm_Initialize()
Dim iCol As Integer, icolL As Integer, iLst As Integer
Dim sTxt As String
icolL = GetLastColumn()
Range(Cells(1, 7), Cells(1, icolL)).EntireColumn.Hidden = True
With lstProdukte
.Clear
.ColumnCount = 2
.ColumnWidths = "150pt;0Pt"
End With
For iCol = 7 To icolL
If Cells(7, iCol).Value = "ja" Then
If IsEmpty(Cells(10, iCol)) Then
lstProdukte.AddItem Cells(9, iCol).Value
Else
lstProdukte.AddItem Cells(9, iCol).Value & " - " & Cells(10, iCol).Value
End If
'Spaltennummer in 2. ausgeblendeter Spalte der Listbox eintragen
lstProdukte.List(lstProdukte.ListCount - 1, 1) = iCol
lstProdukte.Selected(lstProdukte.ListCount - 1) = True
End If
Next iCol
End Sub