Dynamisch befüllte Comboboxen Excel VBA
Hi Heko,
du brauchst drei Blätter mit den Namen Tabelle1, Diagramm, Hilfsblatt.
Wenn du sie anders nennen willst mußt du das in den Codes anpassen.
Weiterhin brauchste aus SteuerelementToolbox zwei ComboBoxen in Tabelle1, mit den Namen ComboBox1 und ComboBox2
Im Dokumentmodul „DieseArbeitsmappe“ :
Option Explicit
Private Sub Workbook_Open()
Nicht = True
Call Aktualisieren
Nicht = False
End Sub
im Dokumentmodul „Tabelle1“ :
Option Explicit
Private Sub ComboBox1\_Change()
If Nicht = True Then Exit Sub
Dim Spa As Integer, Zei As Long, wsH As Worksheet
Set wsH = Worksheets("Hilfsblatt")
Nicht = True
With Worksheets(ComboBox1.Value)
For Spa = 1 To .Cells(1, Columns.Count).End(xlToLeft).Column
Zei = Zei + 1
'hier wird trotz enableevents=false Combobox2\_change ausgeführt, deshalb "Nicht"
wsH.Cells(Zei, 2) = .Cells(1, Spa)
Next Spa
ComboBox2.ListFillRange = "Hilfsblatt!B1:B" & Zei
ComboBox2.Value = ""
End With
Nicht = False
End Sub
Private Sub ComboBox2\_Change()
If Nicht = True Then Exit Sub
Nicht = True
Dim Spa As Integer, wsH As Worksheet
Set wsH = Worksheets("Hilfsblatt")
With Worksheets("Tabelle1")
'wsH.Activate
'Spa = Application.WorksheetFunction.Match(.ComboBox2.Value, wsH.Range("B:B"), 0)
Spa = ComboBox2.ListIndex + 1
End With
Worksheets("Diagramm").Activate
With Worksheets(ComboBox1.Value)
.Columns(Spa).Copy Destination:=Worksheets("Diagramm").Range("A1")
End With
Nicht = False
End Sub
In einem Standardmodul " Modul1":
Option Explicit
Public Nicht As Boolean
Sub Aktualisieren()
Dim ws As Worksheet, Zei As Long
With Worksheets("Hilfsblatt")
For Each ws In Worksheets
Select Case ws.Name
Case "Tabelle1", "Hilfsblatt", "Diagramm"
'nix tun
Case Else
Zei = Zei + 1
.Cells(Zei, 1) = ws.Name
ws.Visible = xlSheetHidden 'mich nerven zuviele geöffnete Blätter ungemein
End Select
Next ws
Worksheets("Tabelle1").ComboBox1.ListFillRange = "Hilfsblatt!A1:A" & Zei
End With
End Sub
''Function Spalte(ByVal Spa As Integer) As String
''Spalte = Mid(Cells(1, Spa).Address, 2)
''Spalte = Left(Spalte, InStr(Spalte, „$“) - 1)
''End Function
Gruß
Reinhard