Informationen und Beispiele zum Thema MsgBox | |
---|---|
![]() |
MsgBox-Seite mit Beispielarbeitsmappe aufrufen |
Informationen und Beispiele zum Thema CommandButton | |
---|---|
![]() |
CommandButton-Seite mit Beispielarbeitsmappe aufrufen |
Betrifft: "Echte" Spaltenanzahl in ComboBox festlegen
von: Martin
Geschrieben am: 19.08.2012 11:28:02
Hallo,
eine ComboBox hat standardmäßig 10 Spalten. Ist es möglich diese Spaltenanzahl einfach auf eine _
Spalte zu festzulegen? Mit einem kleinen Trick ist es mir bereits gelungen, aber es gibt doch bestimmt eine bessere Lösung.
Private Sub UserForm_Initialize() Dim i As Integer With ComboBox1 'Standardmäßig 10 Spalten For i = 1 To 50 .AddItem "Eintrag " & i Next Debug.Print "ComboBox-Spalten: " & UBound(.List, 2) + 1 .Clear 'Über Array-Zuweisung nur noch eine Spalte .List = Array("Eintrag 1") For i = 2 To 50 .AddItem "Eintrag " & i Next Debug.Print "ComboBox-Spalten: " & UBound(.List, 2) + 1 End With End Sub
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 11:59:18
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Martin
Geschrieben am: 19.08.2012 12:09:18
Hallo Josef,
du irrst dich. Lass doch einfach mal meinen geposteten Code durchlaufen und sieh mal ins Direktfenster.
Private Sub UserForm_Initialize() Dim i As Integer With ComboBox1 .List = Array() 'ohne diese Zeile ist ComboBox 10-spaltig For i = 1 To 50 .AddItem "Eintrag " & i Next Debug.Print "ComboBox-Spalten: " & UBound(.List, 2) + 1 End With End SubEin anderes schönes Beispiel:
Private Sub UserForm_Initialize() Dim i As Integer, item With ComboBox1 For i = 1 To 10 .AddItem "Eintrag " & i Next End With i = 1 For Each item In ComboBox1.List Debug.Print i & ": " & item i = i + 1 Next End SubViele Grüße
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:13:02
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Martin
Geschrieben am: 19.08.2012 12:19:53
Hallo Sepp,
ich hatte gehofft, dass meine Code-Beispiele mein Anliegen gut verdeutlichen. Hast du mal in dein Direktfenster gesehen? Obwohl ich nur 10 Einträge (Zeilen) in die ComboBox eingetragen habe, werden bei einer "For Each ... Next"-Anweisung 100 Einträge durchlaufen. Das liegt eben daran, dass die ComboBox standardmäßig 10 Spalten hat.
Viele Grüße
Martin
Betrifft: Quatsch!
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:26:24
Betrifft: Quatsch!
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:26:38
Betrifft: Kein Quatsch! Lies mal in der Excel-Hilfe!
von: Martin
Geschrieben am: 19.08.2012 12:35:20
Hallo Sepp,
offen gesagt finde ich es nicht so toll, dass du dich über meine Äußerungen lustig machst. In der Excel-Hilfe stehe doch eindeutig:
ColumnCount-Eigenschaft Gibt die Anzahl der Spalten an, die in einem Listenfeld oder in einem Kombinationsfeld angezeigt werden sollen.
Ich habe dir hier Codes gepostet, die den Sachverhalt eindeutig belegen. Aber scheinbar hast du die Codes nicht durchlaufen lassen. Eine ComboBox ist standardmäßig auf 10 Spalten eingerichtet, ob du es nun glaubst oder nicht.
Martin
Betrifft: doch Quatsch, ob du es glaubst oder nicht! o.T.
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:41:35
Betrifft: Du irrst. Dann erkläre mal bitte...
von: Martin
Geschrieben am: 19.08.2012 12:46:04
...warum bei diesem Code trotz nur 10 Einträgen ganze 100 Treffer gelistet werden?
Private Sub UserForm_Initialize() Dim i As Integer, item With ComboBox1 .ColumnCount = 1 For i = 1 To 10 .AddItem "Eintrag " & i Next End With i = 1 For Each item In ComboBox1.List Debug.Print i & ": " & item i = i + 1 Next End SubSprachlos?
Betrifft: AW: Du irrst. Dann erkläre mal bitte...
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:51:48
Betrifft: AW: Du irrst. Dann erkläre mal bitte...
von: Martin
Geschrieben am: 19.08.2012 13:13:58
Hallo Sepp,
du hast ".ColumnCount" ins Spiel gebracht, nicht ich! Du hast aber noch immer nicht erklärt, warum mein Code 100 Treffer listet! ListCount ergibt übrigens auch 10 Treffer (...was bei 10 Einträgen auch logisch ist), woher kommen nun die anderen 90 Treffer???
Scheinbar bist du nicht sprachlos, sondern in Erklärungsnot!
Viele Grüße
Martin
Betrifft: Erklärungsnot - nicht wirklich
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 13:25:15
Betrifft: nur leider ist deine Erklärung falsch...
von: Martin
Geschrieben am: 19.08.2012 13:34:51
Hallo Sepp,
wenn .ColumnCount=1 , kannst du nicht auf die zweite Spalte zugreifen, weil es sie nicht gibt!
Genau in diesem Satz irrst du dich:
Private Sub UserForm_Initialize() Dim arrData(0 To 50, 0 To 50) As Variant Dim i As Integer, j As Integer For j = 0 To 49 For i = 0 To 49 arrData(j, i) = "Z" & j & "S" & i Next i Next j ComboBox1.List = arrData Debug.Print ComboBox1.ColumnCount 'ergibt 1 Debug.Print ComboBox1.List(1, 49) 'ergibt Z1S49 End SubAber wenn du mit deinem Level "VBA bescheiden" so wie so alle besser zu wissen scheinst, warum stellst du dann in diesem Forum deine Fragen?
Betrifft: Kraut und Rüben.
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 13:42:18
Betrifft: Deine Erklärung feht leider noch immer...
von: Martin
Geschrieben am: 19.08.2012 14:04:22
Hallo Sepp,
mein letzter Versuch: Ich bitte dich zum wiederholten Male mir zu erklären, warum der folgende Code exakt die 10-fache Anzahl an Einträgen findet:
Private Sub UserForm_Initialize() Dim i As Integer, item With ComboBox1 .ColumnCount = 1 For i = 1 To 10 .AddItem "Eintrag " & i Next End With i = 1 For Each item In ComboBox1.List Debug.Print i & ": " & item i = i + 1 Next End SubIch wäre dir auch sehr dankbar, wenn du dir diese Beispieldatei einmal ansehen würdest: https://www.herber.de/bbs/user/81480.xls
Betrifft: AW: Deine Erklärung feht leider noch immer...
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 14:20:04
Betrifft: Nein....
von: Ramses
Geschrieben am: 19.08.2012 13:54:35
Hallo
Da liegt ein grundätzliches Missverständnis vo
Mit deiner Variante .List(xxx greifst du das Datenarray zu , aber du kannst NICHT auf den Inhalt der Spalte in der Comboxbox zugreifen.
Hier in diesem Beispiel sollte der Unterschied deutlich werden
https://www.herber.de/bbs/user/81481.xlsm
gruss Rainer
Betrifft: Fehler meinerseits.....
von: Ramses
Geschrieben am: 19.08.2012 14:11:52
Hallo
Sorry,... Fehler meinerseits mit dem Beispiel.
Da habe ich einen Zählfehler gemacht mit der Msgbox.
Ich kriegs bald auch nicht mehr auf die Reihe. Muss mir das nochmal zu Gemütze führen :-( Warum sich die Combobox so verhält.
Gruss Rainer
Betrifft: Danke, genau da liegt das Problem...
von: Martin
Geschrieben am: 19.08.2012 14:12:05
Hallo Rainer,
vielen Dank für deine Antwort.
Verstehe ich es richtig: Hinter jeder ComboBox steht ein Datenarray, welches standardmäßig in der zweiten Dimension auf "0 bis 9" festgelegt ist?
Viele Grüße
Martin
Betrifft: AW: Danke, genau da liegt das Problem...
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 14:21:42
Betrifft: AW: Danke, genau da liegt das Problem...
von: Martin
Geschrieben am: 19.08.2012 14:31:21
Hallo Sepp,
ich bin gerade noch einmal den Archivthread durchgegangen. Sorry, du hattest doch recht. Jetzt komme ich noch einmal auf meine Ausgangsfrage zurück:
Ich vermute fast, dass ich die Antwort zur Reduzierung des ComboBox-Datenfeldes auf eine Spalte bereits selbst gepostet habe. Die einzige Möglichkeit ist bestimmt die Zuweisung über die List-Eigenschaft, oder?
Siehst du eine weitere Möglichkeit über "For Each ... Next" ausschließlich die Werte der ersten Spalte zu durchlaufen?
Viele Grüße
Martin
Betrifft: AW: Danke, genau da liegt das Problem...
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 14:36:43
Betrifft: Gut, meine Frage ist geklärt, aber...
von: Martin
Geschrieben am: 19.08.2012 14:47:20
Hallo Sepp,
danke, meine Frage ist abschließend beantwortet. Hinsichtlich dem Kraut und der Rüben lagst du aber daneben... ;-)
Viele Grüße
Martin
Betrifft: Kraut=.ColumnCount - Rüben=.List ;-)) o.T.
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 15:43:39
Betrifft: Eigentl lautet die AW JEIN, ...
von: Luc:-?
Geschrieben am: 19.08.2012 19:02:24
…Martin,
denn man kann ein Datenfeld auch so aufbauen, dass es von For Each zeilen- bzw spaltenweise durchlaufen wird. Dabei kann man dann in der Schleife auch nur das gewünschte Element der Zeile bzw Spalte auswählen. Das ist aber kaum bekannt und man findet deshalb im Netz eher irreführende Ansichten (selbst in Tutorien!) als diese Möglichkeit.
Das bezieht sich natürlich auf das Datenfeld — die ComboBox-Diskussion hat nicht mein Interesse.
Gruß Luc :-?
Betrifft: Außerdem...
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 13:38:38
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Gerd L
Geschrieben am: 19.08.2012 12:33:17
Hallo Martin,
die Spaltenanzahl ist beim Füllen mit der AddItem-Methode oder per RowSource wohl auf max. 10 begrenzt.
Private Sub UserForm_Activate() Dim arrTest(1 To 50), i As Integer For i = 1 To 50 arrTest(i) = "Eintrag" & i Next With ComboBox1 .Clear .ColumnCount = 1 .List = WorksheetFunction.Transpose(arrTest) .ListIndex = 0 End With End SubGruß Gerd
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Ramses
Geschrieben am: 19.08.2012 12:04:58
Hallo
Ich versteh die Frage irgendwie nicht ganz.
Mit
Me.Combobox1.Columncount = 1
kannst du die Anzahl der Spalten doch ganz einfach verändern.
und mit
Private Sub CommandButton1_Click() With Me.ComboBox1 .ColumnCount = Me.ComboBox1.ColumnCount + 1 .AddItem "1" .List(.ListCount - 1, .ColumnCount - 1) = "1" End With End Subdie entsprechenden Spalten geziehlt füllen, bzw. abfragen.
Betrifft: AW: "Echte" Spaltenanzahl in ComboBox festlegen
von: Martin
Geschrieben am: 19.08.2012 12:14:04
Hallo Rainer,
nein, ColumnCount gibt nur an wieviele ComboBox-Spalten anzgezeigt werden sollen. Auch wenn ich ColumnCount = 1 setze, hat die ComboBox weiterhin 10 Spalten.
Private Sub UserForm_Initialize() Dim i As Integer, item With ComboBox1 .ColumnCount = 1 For i = 1 To 10 .AddItem "Eintrag " & i Next End With i = 1 For Each item In ComboBox1.List Debug.Print i & ": " & item i = i + 1 Next End SubViele Grüße
Betrifft: OK - der weiß mehr als ich/wir ;-)) o.T.
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 12:15:58
Betrifft: Ist das jetzt erst oder ironisch gemeint? o.T.
von: Martin
Geschrieben am: 19.08.2012 12:21:14
owT
Betrifft: Das ist mehr als ironisch gemeint....
von: Ramses
Geschrieben am: 19.08.2012 12:38:54
Hallo
probiers doch einfach mal aus
https://www.herber.de/bbs/user/81479.xlsm
Gruss Rainer
Betrifft: AW: Das ist mehr als ironisch gemeint....
von: Martin
Geschrieben am: 19.08.2012 13:04:17
Hallo Rainer,
ich glaube hier liegt ein grundsätzliches Mißverständnis vor: Deine Beispieldatei zeigt die Funktion von ColumnCount, aber ColumnCount gibt lediglich an wieviele Spalten angezeigt werden. Ich habe dir jetzt mal eine Beispieldatei hochgeladen, die doch recht deutlich beweist, dass eine ComboBox standardmäßig 10 Spalten hat: https://www.herber.de/bbs/user/81480.xls
Viele Grüße
Martin
Betrifft: AW: Das ist mehr als ironisch gemeint....
von: Hajo_Zi
Geschrieben am: 19.08.2012 13:05:57
Hallo Martin,
es gehen auch mehr als 10 Spalten, wenn Du einen Bereich zu weist.
Betrifft: darauf hab ich schon gewartet! o.T.
von: Josef Ehrensberger
Geschrieben am: 19.08.2012 13:07:08
Betrifft: AW: Das ist mehr als ironisch gemeint....
von: Martin
Geschrieben am: 19.08.2012 13:16:27
Hallo Hajo,
ja, das ist mir bekannt. Genau auf diese Weise setze ich die Spaltenanzahl doch auch auf 1 herunter:
Private Sub UserForm_Initialize() Dim i As Integer With ComboBox1 .List = Array() 'ohne diese Zeile ist ComboBox 10-spaltig For i = 1 To 50 .AddItem "Eintrag " & i Next Debug.Print "ComboBox-Spalten: " & UBound(.List, 2) + 1 End With End SubViele Grüße
Betrifft: AW: Das ist mehr als ironisch gemeint....
von: Hajo_Zi
Geschrieben am: 19.08.2012 13:27:51
Hallo Martin,
in Deinem Beispiel arbeitest Du mit Add Item. Da sind nur 10 Spalten möglich. Weist Du aber den Bereich zu sind es mehr als 10.
Gruß Hajo
Betrifft: AW: Das ist mehr als ironisch gemeint....
von: Martin
Geschrieben am: 19.08.2012 13:38:13
Hallo Hajo,
aber bevor ich mit ".AddItem" arbeite, habe ich bereits mit ".List = Array()" die Spaltenanzahl neu festgelegt. Da mein Array aber leer ist, wird die Spaltenanzahl auf 1 reduziert.
Viele Grüße
Martin