Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1172to1176
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
Auswahl in ComboBox nur mit angezeigten Spalten
RainerK
Hallo,
komme bei einer Auswahl mittels ComboBox nicht so recht weiter.
Habe im Sub UserForm_Initialize()

'Button [ AUSWAHL TREFFEN ]
Dim meAr
Dim icolL As Integer
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
End Sub
Die selben Spalten habe ich in einer UserForm zuvor ausgewählt.
In der zweiten UserForm hätte ich jedoch nun gerne nur die aufgrund der ersten UserForm ausgewählten Spalten, also die, welche im Arbeitsblatt zwischen G und icoL angezeigt werden.
Vorsorglich Beispieltabelle: https://www.herber.de/bbs/user/71130.xlsm
Gruß Rainer
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

Anzeige
AW: Auswahl in ComboBox nur mit angezeigten Spalten
19.08.2010 17:48:35
RainerK
Hallo Franz,
vielen Dank für Deine Ausführungen und Deine Mithilfe.
Kann leider nicht gleich testen; melde mich sobald ich Deinen Code eingebaut habe.
Gruß RainerK
AW: Auswahl in ComboBox nur mit angezeigten Spalten
20.08.2010 08:41:49
RainerK

Franz: irgendwie ist mir die von dir gewünschte Reihenfolge unklar, in der die die Userforms angezeigt werden sollen.

Hallo Franz,
die UserFormen werden nicht in der Reihenfolge aufgerufen wie diese im VBA-Editor abgebildet sind.
Im Arbeitsblatt ruft der erste Button [ Produkte auswählen ] die UserForm "frmProducts" auf.
Diese Liste kann dann beliebig verändert werden.
Als nächstes könnte mit Button 2 dann wieder alle oder aber (und hier ist mein Problem) mit Button 3 [ Auswahl treffen ] eine Wertigkeit festgelegt werden.
In [ Auswahl treffen ] möchte ich dann in den ComboBoxen nur die Spalten haben, welche auf dem Arbeitsblatt angezeigt werden. Sollte dafür eine "Merkzelle" erforderlich sein, könnte man die Zeile 13 dafür nutzen. Die Standardauswahl (Zeile 7 = ja) soll als solche unverändert bleiben.
Im Ansatz wäre dies dann vermutlich so in etwa:
frmProducts.show
lstProdukte_Click()
angehaktes Produkt = Merkzeichen "x" in cells(13, iCol)
nicht angehaktes = Merkzeichen wieder löschen
frmAuswahl.show
For iCol = 7 to icolL
If .cells(13, iCol) = "x" Then meAr = .Range(.cells(19, iCol), .Cells(24, icolL))
next iCol

Nur so hätte ich ja vermutlich nur die letzte Spalte und mit .AddItem mit meAr hatte zuvor leider auch nicht funktioniert.
Hoffe, dass ich es so verständlich rüber gebracht habe.
Gruß RainerK
Anzeige
AW: Auswahl in ComboBox nur mit angezeigten Spalten
20.08.2010 23:40:22
fcs
Hallo Rainer,
ich denke jetzt sollte es in der gewünschten Form funktionieren. In Zeile 13 werden für die engere Auswahl die Zahlen 1, 2 und 3 eingetragen.
Gruß
Franz
AW: ... und hier noch die Datei
21.08.2010 10:45:19
RainerK
Hallo Franz,
klasse, das war genau die Hilfe in die richtige Richtung.
Habe mir das ganze (laienhaft mit Copy von Initialize in ComboBox1 und ..2) noch abgeändert.
Funktioniert, solange ich mindestens drei Produkte ausgewählt habe.
Mit nur einem habe ich dann leider einen Fehler den ich bei

ReDim meAr (1 To iLst, 1 To 7) 
noch abfangen müsste.
Hatte an

iLst > 1 Then ReDim meAr(1 To iLst, 1 To 7) 
gedacht. Dann kommt allerdings ein Syntaxfehler.
Könnte ich Deine Hilfe nochmals in Anspruch nehmen?
Hier meine geänderte Tabelle: https://www.herber.de/bbs/user/71162.xls
Gruß Rainer
Anzeige
AW: ... und hier noch die Datei
21.08.2010 10:56:02
RainerK
Schande,
habe ja "If" vergessen.
Hat sich erledigt.
Nochmals vielen Dank für Deine Hilfe.
Gruß Rainer
noch ein Bug
21.08.2010 12:00:31
RainerK
Hallo,
funktioniert bis auf eine Kleinigkeit alles einwandfrei.
Nun habe ich lediglich noch eines abzufangen:
Habe ich z. B. nur zwei Produkte ausgewählt und die Auswahl über die ComboBox1 und ..Box2 getroffen, bricht der Code ab, wenn ich nochmal auf die ComboBox1 klicke.
Selbiges gilt, wenn ich mehrere Produkte ausgewählt habe und bei ComboBox1 wieder klicke.
Meine Idee:
Sperre mit Click der jeweiligen ComboBox diese mit

Me.ComboBox.visible=false 
und füge einen neuen Button für [ Neue Auswahl ] hinzu.
Der Code des Button's wäre dann vermutlich
unload me
frmAuswahl.show
Alternativ wäre ein Refresh o.ä..
Was wäre geeignet?
Gruß Rainer
Meine Änderungen: https://www.herber.de/bbs/user/71163.xls
Anzeige
AW: noch ein Bug
21.08.2010 17:50:10
fcs
Hallo Rainer,
ich die Datei nochmals angepasst und optimiert.
Geändert sind die Prozedur "Auswahl" und der Code von "frmAuswahl"
Wesentlich im Userform:
1. Alle Funktionalitäten, du du scheinbar nicht benötigst sind wieder gelöscht.
2. Änderungen in Combobox1 und 2 werden immer direkt in die Tabelle geschrieben. Ein vorhandener Eintrag ("1. Wahl" bzw. "2.Wahl") wird vorher durch "ja" ersetzt.
3. Die Daten für das Array "meAr" werden in der separaten Function "JaArray" berechnet. Ist übersichtlicher, da meAr in mehreren Prozduren neu berechnet werden muss.
4. Die Logik der Dateneingabe in den Comboboxen ist optimiert.
- 1. Wahl muss immer als erstes ausgewählt werden.
- bei nachträgliche Änderungen in Combobox 1 oder 2 wird geprüft, ob Combobox 2 und/oder 3 ihren Wert wiederbekommen oder zurückgesetzt werden (keine Doppelauswahl möglich).
Textdatei mit Code:
https://www.herber.de/bbs/user/71173.txt
Gruß
Franz
Anzeige
AW: noch ein Bug
22.08.2010 10:01:55
RainerK
Hallo Franz,
ein dickes Dankeschön für Deine Mühe, mir den Code proffesionell umzubauen.
Auf Deine ? bei 'Nicht gewählte Spalten ausblenden:
In der Originaldatei ist dieses Arbeitsblatt ein Auszug an Leistungen (Vorauswahl).
Die Werte (1.Wahl, 2.Wahl und 3.Wahl) werden in das Folgearbeitsblatt (Detailansicht) übernommen.
Dort werden dann nur diese Produkte betrachtet.
Habe wieder einiges dazugelernt.
Vielen Dank
Gruß Rainer

299 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige