Gewusst wie: Füllen einer Combobox
Ich bin ganz neu bei VBA und ich habe Schwierigkeiten mit dem füllen einer combobox.
Ich versuche, füllen einer combobox mit dem Inhalt der ersten Spalte in einer Tabellenkalkulation, so kann ich löschen Sie die entsprechende Zeile der Daten auf der Grundlage der combobox-Auswahl.
Ist, habe ich mich durch mehrere Fragen hier und anderswo, wenn diese Frage, aber ich habe nicht nichts gefunden, die funktionierte.
- füllen Sie die combobox in VBA array-Elemente mit
- Wie kann ich ein Kombinationsfeld aufzufüllen, die aus einer Spalte in meiner excel-Tabelle?
- http://www.techrepublic.com/blog/microsoft-office/populate-a-userform-combo-box-in-excel-with-a-dynamic-list/
Unten ist der code, den ich versucht habe. Ich bin etwas verloren, als ich versucht habe, zusammenschustern, die unterschiedlichen Antworten von anderen Fragen, um diese zu arbeiten, aber ohne Erfolg. Ich erwarte, dass die combobox zu füllen mit den Werten aus Spalte 1, aber es bleibt leer.
Versuch #1 Dies beinhaltete das erstellen eines dynamic range:
=OFFSET(PC_DataSheet!$A$2,0,0, COUNTA(PC_DataSheet!$A$1:$A$65536)-1,1)
Private Sub UserForm1_Initialize()
Dim rngPCNumber As Range
Dim ws As Worksheet
Set ws = Worksheets("Sheet1")
For Each rngPCNumber In ws.Range("PCNumber")
Me.PC_ListComboBox.AddItem rngPCNumber.Value
Next rngPCNumber
End Sub
Versuch #2
Private Sub UserForm1_Initialize()
Dim arr() As Variant
arr = Worksheets("Sheet1").Range("C2:" & lrow).Value
PC_ListComboBox.List = arr
End Sub
Versuch #3
Private Sub UserForm1_Initialize()
Dim vArr As Variant
Dim i As Integer
vArr = Sheet1.Range("A:1").Value
With PC_ListComboBox.Clear
For i = LBound(vArr) To UBound(vArr)
.AddItem vArr(i)
Next i
End With
End Sub
Jede Hilfe auf diesem würde sehr geschätzt!
EDIT: ich habe versucht, das einfügen des code vorgeschlagen Gary ' s Student in meine UserForm_Initialize() Sub, aber wenn ich versuche zum öffnen der userform bekomme ich die folgende Fehlermeldung:
Run-time error '9': Subscript out of range
Wenn ich auf "Debuggen" klicken, unterstreicht Sie diesen code:
'Opens PC UserForm when pressed.
Private Sub AddPCButton_Click()
UserForm.Show 'This line is the line highlighted by the debugger.
End Sub
Ich habe keine Ahnung, was dies verursacht...wenn ich den vorgeschlagenen code erhalte ich eine Fehlermeldung, aber wenn ich den code entfernen der userform einwandfrei funktioniert.
Hier ist Private Sub UserForm_Initialize() mit und ohne die vorgeschlagene code.
'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()
'Empties combo boxes.
PC_OSTypeComboBox = ""
PC_HDTypeComboBox = ""
'Populates combo boxes.
With PC_OSTypeComboBox
.Clear
.AddItem "Windows 8"
.AddItem "Windows 7"
.AddItem "Windows Vista"
.AddItem "Windows XP"
.AddItem "Windows 2000"
.AddItem "Windows 98"
.AddItem "Windows NT"
.AddItem "Windows 95"
End With
With PC_HDTypeComboBox
.Clear
.AddItem "SATA"
.AddItem "IDE"
.AddItem "SCSI"
End With
End Sub
Dies ist auch der vorgeschlagene code:
'Clears and Initializes the form when first loaded.
Private Sub UserForm_Initialize()
Dim N As Long, i As Long
With Sheets("Sheet1")
N = .Cells(Rows.Count, 1).End(xlUp).Row
End With
With PC_NumberComboBox
.Clear
For i = 1 To N
.AddItem Sheets("Sheet1").Cells(i, 1).Value
Next i
End With
'Empties combo boxes.
PC_OSTypeComboBox = ""
PC_HDTypeComboBox = ""
'Populates combo boxes.
With PC_OSTypeComboBox
.Clear
.AddItem "Windows 8"
.AddItem "Windows 7"
.AddItem "Windows Vista"
.AddItem "Windows XP"
.AddItem "Windows 2000"
.AddItem "Windows 98"
.AddItem "Windows NT"
.AddItem "Windows 95"
End With
With PC_HDTypeComboBox
.Clear
.AddItem "SATA"
.AddItem "IDE"
.AddItem "SCSI"
End With
End Sub
Sie sollte nicht schreiben, tags, im Titel, da Fragen sind bereits sortiert und klassifiziert durch tags. Auch Dinge wie "danke" oder "ich habe diesen Fehler auch." sind nicht wirklich notwendig. Dies sind einfache Regeln, die helfen, halten StackOverflow organisiert 🙂
Ah ok, danke! <--- nicht eigentlich als Scherz gedacht hier 😉
In Ihrem update, es sieht aus wie Sie sein könnten, verweisen auf eine nicht vorhandene Arbeitsblatt - haben Sie vergessen zu aktualisieren "Tabelle1" aus dem, was @Gary ' s Student geschrieben?
Die Fehlermeldung "subscript out of range", wenn das einen Unterschied macht. Ich habe Doppel-und-dreifach-geprüft für die Benennung von Themen und keine gefunden. Wie kann ich überprüfen, ob der Arbeitsblatt-name wird in der Liste der Arbeitsblätter?
InformationsquelleAutor ckemmann | 2015-04-10
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hier ist ein super einfaches Beispiel für das erstellen und ausfüllen eines Formen Stil der combo-box:
Zum Beispiel:
EDIT#1
Erstellte ich eine UserForm aufgerufen Demo mit einer combo-box namens MyBox
In einem Standard-Modul ich gesagt:
und in der UserForm-code-Bereich:
Läuft DisplayIt() produziert:
Diese basiert auf dieses tutorial
Siehe mein EDIT#1
Bitte siehe meine "Antwort Bearbeiten". Ich habe versucht, die Umsetzung Ihres code und es verursacht einen Fehler, wenn ich versuche, öffnet sich die userform.
Laren, Gary ' s Student...entweder Sie haben eine Idee - ich bin Total ratlos hier.
InformationsquelleAutor Gary's Student
Also versuchte ich die Lösung von Gary Studenten vorgeschlagen, was auch geklappt hat, wenn ich Sie erstellt eine neue Arbeitsmappe mit dem code, den er zur Verfügung gestellt, aber für einige Grund der 'subscript out of range' Fehler immer wieder wenn ich Sie eingebaut in meinem Projekt, egal was ich Tat, umbenennen meine Arbeitsblätter in der Arbeitsmappe aus, einschließlich der Einrichtung einer sub-Liste aller Arbeitsblätter und rufen Sie das Datenblatt von dort.
Entschied ich mich stattdessen eine inputbox anstelle einer combobox, die endete als ein wenig einfacher zu Programmieren. Unten ist der code für jedermann neugierig.
End Sub
InformationsquelleAutor ckemmann
Der obige code befindet sich in meiner UserForm-Code (mit der Rechten Maustaste auf die UserForm, dann klicken Sie auf 'code anzeigen')
Erstellte ich ein Arbeitsblatt Anruflisten. Jede Spalte in diesem Blatt ist für eine andere combo-box. Sobald ich füllte ihn aus und bekam den code arbeiten, ich versteckte die LISTEN Arbeitsblatt.
Jede ComboBox, die ich benannt CB_XX so beachten Sie diese Namen im code
Ich starte den code mit der Definition der Länge der Listen (Hinweis: dieser schlägt fehl, wenn Sie nur ein Element in der Liste, aber wenn Sie nur ein Element nicht mit einem combo-box)
Sobald ich die Längen habe ich die richtigen Spalten mit den richtigen comboboxes. Beachten Sie das +1 in jeder for/next-Schleife. Das ist, fügen Sie eine leere am Ende jeder Liste, um dem Benutzer zu ermöglichen, leeren Sie die Auswahl. Entfernen Sie das +1, wenn Sie nicht wollen, dass die leere. Ich beginne bei i = 2 die Anzeige der header-Zeile auf meinem Blatt LISTEN.
InformationsquelleAutor Kevin