Anzeige
Archiv - Navigation
1928to1932
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
Füllen einer Combobox mittels VBA
28.04.2023 17:42:51
Max

Hallo zusammen,
ich bitte um eure Hilfe. Ich habe zum Bearbeiten einer Excel-Tabelle eine UserForm erstellt, welche eine Combobox enthält, die beim Start der UserForm mit Daten aus einer anderen Excel-Tabelle gefüllt wird. Es werden in die Combobox nur jene Zeilen übernommen, welche in der Spalte "E" den Wert "G" enthalten.

Soweit funktioniert das Ganze einwandfrei. Mein einziges Problem ist nur, dass all jene Zeilen, welche in der Spalte "E" nicht den Wert "G" enthalten (folglich nicht angezeigt werden sollen) als Leerzeile angezeigt werden. Habt ihr einen Tipp, wie man die Combobox ohne solcher Leerzeilen füllen kann?

Danke für eure Hilfe
lg
Margarita

18
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Füllen einer Combobox mittels VBA
28.04.2023 17:44:33
Daniel
Hi
es gibt mehrere Wege, einen Combobox zu befüllen.
Welchen verwendest du?
Gruß Daniel


AW: Füllen einer Combobox mittels VBA
28.04.2023 18:16:41
Max
Hallo,
anbei mein Mustercode
******************************************
Private Sub UserForm_initialize()
'Füllen der ComboBox mit Daten aus Excel-Tabelle - funktioniert
Dim i As Long
Dim oExc As Excel.Application
Dim oWrk As Excel.Workbook
Dim oSht As Excel.Worksheet
Dim Arr() As String
Const xlDown As Integer = -4121

Set oExc = CreateObject("Excel.application")
Set oWrk = oExc.Workbooks.Open("L:\Rechnungen\Kundenadressen.xlsx")
Set oSht = oWrk.Worksheets(1)

ReDim Arr(oSht.Cells(1, 1).End(xlDown).Row - 1, 12)
i = 1

While oSht.Cells(i, 1) > ""
If oSht.Cells(i,5)="G" then
Arr(i - 1, 0) = oSht.Cells(i, 1).Value
Arr(i - 1, 1) = oSht.Cells(i, 2).Value
Arr(i - 1, 2) = oSht.Cells(i, 3).Value
Arr(i - 1, 3) = oSht.Cells(i, 4).Value
Arr(i - 1, 4) = oSht.Cells(i, 5).Value
Arr(i - 1, 5) = oSht.Cells(i, 6).Value
Arr(i - 1, 6) = oSht.Cells(i, 7).Value
Arr(i - 1, 7) = oSht.Cells(i, 8).Value
Arr(i - 1, 8) = oSht.Cells(i, 9).Value
Arr(i - 1, 9) = oSht.Cells(i, 10).Value
Arr(i - 1, 10) = oSht.Cells(i, 11).Value
Arr(i - 1, 11) = oSht.Cells(i, 12).Value
End if


i = i + 1
Wend

With Me.cmbKunde
.Clear
.ColumnCount = 6
.BoundColumn = 6
.List = Arr
End With

oExc.Quit
Set oExc = Nothing

End Sub
**********************************************************


Anzeige
AW: Füllen einer Combobox mittels VBA
28.04.2023 18:30:30
Daniel
Hi
das i = i + 1 muss ins IF-THEN mit rein.
wieviele "G" du hast, kannst du ja mit Worksheetfunction.countif (=ZählenWenn) bestimmen, und damit das Array gleich passend dimensionieren.
man sollte, wenn man eine Exceldatei öffnet, keine neue Excelinstanz dafür anlegen (oExc)
Das ist nicht notwendig und hat u.U. zur Folge, dass man versichedene Exceloperationen nicht ausführen kann.
Gruß Daniel


AW: Füllen einer Combobox mittels VBA
29.04.2023 07:28:09
Max
Ok. Danke für die rasche Antwort. Hört sich auch gut an. Aber kannst du mir bitte noch helfen, wie ich die Worksheetfunction.countif dann richtig in meinen Code einbaue.
Vielen Dank und liebe Grüße
Margarita


Anzeige
AW: Füllen einer Combobox mittels VBA
29.04.2023 12:23:10
Daniel
ReDim Arr(worksheetfunction.countif(oSht.columns(5), "G") - 1, 12)


AW: Füllen einer Combobox mittels VBA
29.04.2023 17:18:50
Max
Hallo, Danke ich hab jetzt meine ReDim Zeile durch deine ersetzt. Bekomme aber nun die Fehlermeldung Laufzeitfehler 13/Typen unverträglich.
Die "IF"-Anweisung habe ich auskommentiert. Dürfte ich ja dann nicht mehr brauchen.
Bitte um Hilfe für Dummies wie mich. Sorry für die Begriffstützigkeit.

Private Sub UserForm_initialize()
'Füllen der ComboBox mit Daten aus Excel-Tabelle - funktioniert
Dim i As Long
Dim oExc As Excel.Application
Dim oWrk As Excel.Workbook
Dim oSht As Excel.Worksheet
Dim arr() As String
Const xlDown As Integer = -4121

Set oExc = CreateObject("Excel.application")
Set oWrk = oExc.Workbooks.Open("L:\Rechnungen_offen\Kundenadressen.xlsx")
Set oSht = oWrk.Worksheets(1)

ReDim arr(WorksheetFunction.CountIf(oSht.Columns(5), "G") - 1, 12)

i = 1
While oSht.Cells(i, 1) > ""

'If oSht.Cells(i, 5) = "G" Then
arr(i - 1, 0) = oSht.Cells(i, 1).Value
arr(i - 1, 1) = oSht.Cells(i, 2).Value
arr(i - 1, 2) = oSht.Cells(i, 3).Value
arr(i - 1, 3) = oSht.Cells(i, 4).Value
arr(i - 1, 4) = oSht.Cells(i, 5).Value
arr(i - 1, 5) = oSht.Cells(i, 6).Value
arr(i - 1, 6) = oSht.Cells(i, 7).Value
arr(i - 1, 7) = oSht.Cells(i, 8).Value
arr(i - 1, 8) = oSht.Cells(i, 9).Value
arr(i - 1, 9) = oSht.Cells(i, 10).Value
arr(i - 1, 10) = oSht.Cells(i, 11).Value
arr(i - 1, 11) = oSht.Cells(i, 12).Value

i = i + 1
Wend

With Me.cmbKunde
.Clear
.ColumnCount = 6
.BoundColumn = 6
.List = arr
End With

oExc.Quit
Set oExc = Nothing

lg Max


Anzeige
AW: Füllen einer Combobox mittels VBA
30.04.2023 00:11:48
Daniel
Warum glaubst du, die Zeile mit If nicht mehr zu benötigen?


AW: Füllen einer Combobox mittels VBA
30.04.2023 06:35:17
Max
War ein Denkfehler. Hab die If-Zeile wieder eingebaut. Trotzdem Fehlermeldung Laufzeitfehler 13.


AW: Füllen einer Combobox mittels VBA
30.04.2023 22:56:25
Daniel
In welcher Codezeile?
Welche Werte haben die einzelnen Bestandteile (Variablen, Zwischenergebnisse) in der Zeile, die den Fehler hat?

Sorry aber wenn ich dir helfen soll, musst du schon etwas informativer sein. Ich bin kein Hellseher, auch wenn viele das schon vermutet haben.


AW: Füllen einer Combobox mittels VBA
01.05.2023 06:43:59
Max
Hallo,
der Fehler tritt ab der Codezeile
ReDim arr(WorksheetFunction.CountIf(oSht.Columns(5), "G") - 1, 12)
auf. Die Werte von Variablen und Zwischenergebnissen kann ich dir nicht sagen, da es ja quasi nach Aufruf des ExcelSheets die erste Codezeile ist.
Was ich vergessen habe zu schreiben. Das ganze wird eigentlich aus einem Word-Doc aufgerufen und greift auf die Excel-Tabelle zu.
So sieht das Ganze jetzt aus. If-Code hab ich wieder dort eingebaut wo er war.
Mit der Codezeile "ReDim arr(oSht.Cells(1, 1).End(xlDown).Row - 1, 12)" läuft alles (hab ich aber jetzt auskommentiert). Allerdings werden halt in der ComboBox leere Zeilen angezeigt.
*************************************************************************************
Private Sub UserForm_initialize()
'Füllen der ComboBox mit Daten aus Excel-Tabelle - funktioniert
Dim i As Long
Dim oExc As Excel.Application
Dim oWrk As Excel.Workbook
Dim oSht As Excel.Worksheet
Dim arr() As String
Const xlDown As Integer = -4121

Set oExc = CreateObject("Excel.application")
Set oWrk = oExc.Workbooks.Open("L:\Rechnungen_offen\Kundenadressen.xlsx")
Set oSht = oWrk.Worksheets(1)

'ReDim arr(oSht.Cells(1, 1).End(xlDown).Row - 1, 12)
ReDim arr(WorksheetFunction.CountIf(oSht.Columns(5), "G") - 1, 12)

i = 1
While oSht.Cells(i, 1) > ""

If oSht.Cells(i, 5) = "G" Then
arr(i - 1, 0) = oSht.Cells(i, 1).Value
arr(i - 1, 1) = oSht.Cells(i, 2).Value
arr(i - 1, 2) = oSht.Cells(i, 3).Value
arr(i - 1, 3) = oSht.Cells(i, 4).Value
arr(i - 1, 4) = oSht.Cells(i, 5).Value
arr(i - 1, 5) = oSht.Cells(i, 6).Value
arr(i - 1, 6) = oSht.Cells(i, 7).Value
arr(i - 1, 7) = oSht.Cells(i, 8).Value
arr(i - 1, 8) = oSht.Cells(i, 9).Value
arr(i - 1, 9) = oSht.Cells(i, 10).Value
arr(i - 1, 10) = oSht.Cells(i, 11).Value
arr(i - 1, 11) = oSht.Cells(i, 12).Value
End If

i = i + 1
Wend

With Me.cmbKunde
.Clear
.ColumnCount = 6
.BoundColumn = 6
.List = arr
End With

oExc.Quit
Set oExc = Nothing
**********************************************************************************
Danke und lg
Margarita


Anzeige
AW: Füllen einer Combobox mittels VBA
29.04.2023 12:10:47
GerdL
Moin,

probier mal.
Private Sub CommandButton1_Click()

    Dim a As Long, V, arr() As String, z As Long, s As Integer, i As Integer
    
    ComboBox1.Clear
    ComboBox1.ColumnCount = 12
    ComboBox1.ColumnWidths = "20;20;20;20;20;20;10;10;10;10;10;10"
    
    With ThisWorkbook.Sheets(1)
    
    
        a = WorksheetFunction.CountIf(.Range("E:E"), "G")
        
        ReDim arr(0 To a, 0 To 11)
        
        If a = 0 Then
            ComboBox1.AddItem "Nix"
            Exit Sub
        End If
        
        V = .Range(.Cells(1, 1), .Cells(.Cells(Rows.Count, 5).End(xlUp).Row, 12))
    
    End With
    
    For z = LBound(V, 1) To UBound(V, 1)
    
        If V(z, 5) = "G" Then
            For s = 0 To 11
                arr(i, s) = (V(z, s + 1))
            
            Next s
            i = i + 1
        End If
    Next z

    ComboBox1.List = arr
End Sub
Gruß Gerd


Anzeige
AW: Füllen einer Combobox mittels VBA
30.04.2023 06:37:26
Max
Hallo, danke für deinen Code. Hat jetzt vorerst nicht funktioniert. Ich probier mal mit dem Vorschlag von Daniel weiter zu kommen.
lg Max


AW: Füllen einer Combobox mittels VBA
01.05.2023 07:39:26
Oberschlumpf
Hi Max ODER Margarita??????

da mittlerweile auch du gemerkt haben solltest, dass sowohl Daniel als auch Gerd nich soooo guuuut im RATEN sind, wieso kommst du nich mal auf die Idee....sowohl eine Excel-Bsp-Datei...als auch (seit kurzem erst bekannt, weil du vergessen hast zu informieren) eine Word-Bsp-Datei per Upload zu zeigen?

Beide Bsp-Dateien sollten vom Aussehen natürlich identisch mit den Original-Dateien sein.
Und natürlich sollten auch dort Bsp-DATEN enthalten sein, wo erforderlich.
Und bitte vergiss auch nich, den Code, den du schon verwendest, in den Bsp-Dateien dort einzufügen, wo er auch im Original zu finden wäre.

Ciao
Thorsten


Anzeige
AW: Füllen einer Combobox mittels VBA
01.05.2023 10:02:37
Oberschlumpf
Hi,

is ja - fast - schon mal ein guter Anfang.
Aber leider nur fast.

In einem deiner Antworten schreibst du:
" Das ganze wird eigentlich aus einem Word-Doc aufgerufen und greift auf die Excel-Tabelle zu."

Aber bitte wo in der Word-Datei hast du alles, was an Code, userform, etc drin sein sollte?

Bitte noch mal die Word-Datei MIT Code, userform, etc per Upload zeigen.

Ciao
Thorsten


Anzeige
AW: Füllen einer Combobox mittels VBA
01.05.2023 11:11:40
Oberschlumpf
Hi,

da bin ich wieder - mit Lösung!
https://www.herber.de/bbs/user/158980.zip

(bitte die ZIP-Datei entpacken, erst dann die Datei "MusterDoc.docm" starten!)

So, MIT deinen Bsp-Dateien hab ich sofort gesehen, was du falsch gemacht hast :-)
Im Code hab ich einige Kommentare hinterlassen, die dir erklären, was falsch war.

Wenn du jetzt den Code in der Word-Datei startest, werden - wie von dir gewünscht - in der ComboBox nur die Daten-Zeilen aus der Excel-Datei zur Auswahl angeboten, die in Spalte E ein "G" enthalten...nämlich genau 2 Zeilen: Musterkunde1 + Musterkunde3

In der Combobox gibt es keine Leerzeilen mehr.

Konnte ich helfen?

Ciao
Thorsten


Anzeige
AW: Füllen einer Combobox mittels VBA
01.05.2023 11:31:05
Max
Hallo,
sehr fein. Läuft so wie ich es mir vorgestellt hab.
Vielen Dank für deine Hilfe, deine Zeit und auch für die ausführlichen Kommentare.
liebe Grüße und schönen Tag noch.
Max

306 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige