如何填充combobox

我对VBA相当陌生,而且一直在拼命挑选combobox。 我试图用电子表格中第一列的内容填充combobox,这样我就可以根据combobox的select删除相关联的数据行。

在提出这个问题时,我已经在这里和其他地方查看了几个问题,但是我还没有find任何有效的东西。

  • 使用数组元素填充VBA中的combobox
  • 如何从我的Excel电子表格中的列填充combobox?
  • http://www.techrepublic.com/blog/microsoft-office/populate-a-userform-combo-box-in-excel-with-a-dynamic-list/

以下是我试过的代码。 我有些失落,因为我一直在试图拼凑来自其他问题的不同答案,以使这个工作,但无济于事。 我期望combobox填充来自列1的值,但它仍然是空白的。

尝试#1这涉及到创build一个dynamic范围:

=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 

尝试#2

 Private Sub UserForm1_Initialize() Dim arr() As Variant arr = Worksheets("Sheet1").Range("C2:" & lrow).Value PC_ListComboBox.List = arr End Sub 

尝试#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 

任何帮助,将非常感激!


编辑:我已经尝试插入代码加里的学生build议我的UserForm_Initialize()子,但是当我尝试打开userform我得到以下错误信息:

运行时错误“9”:下标超出范围

当我点击debugging,它突出显示此代码:

 'Opens PC UserForm when pressed. Private Sub AddPCButton_Click() UserForm.Show 'This line is the line highlighted by the debugger. End Sub 

我不知道是什么原因导致这个…当我使用build议的代码,我得到一个错误消息,但是当我删除代码的userformfunction完美。 这里是私人小组UserForm_Initialize()有和没有build议的代码。

 '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 

这包括build议的代码:

 '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 

这是创build和填充Forms样式combobox的一个超级简单的例子:

 Sub FormsStyleComboBox() ActiveSheet.DropDowns.Add(411, 14.25, 124.5, 188.25).Select N = Cells(Rows.Count, "A").End(xlUp).Row strng = Range("A1:A" & N).Address Selection.ListFillRange = strng End Sub 

例如:

在这里输入图像描述

编辑#1

我创build了一个名为Demo的UserForm,其中包含名为MyBox的combobox

在这里输入图像描述

在一个标准模块中,我提出:

 Sub DisplayIt() Demo.Show End Sub 

并在UserForm代码区域中

 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 MyBox .Clear For i = 1 To N .AddItem Sheets("Sheet1").Cells(i, 1).Value Next i End With End Sub 

运行DisplayIt()产生:

在这里输入图像说明

这是基于这个教程

所以我尝试了Gary的学生build议的解决scheme,当我用他提供的代码创build一个新的工作簿时,这个解决scheme工作正常,但是由于某种原因,当我在项目中实现它时, '下标超出范围'的错误不断出现,无论我在工作簿中重命名我的工作表,包括设置一个子表来列出所有的工作表并从那里调用工作表。

我select使用input框而不是combobox,最终代码更简单一些。 下面是对任何人好奇的代码。

 Private Sub DeletePCButton_Click() 'Assigns variables for delete sequence. Dim PCNumberEntry As String Dim Confirm As Integer Dim r As Range Dim c As Range Dim cellsToDelete As Range Dim m As Integer 'Asks for PC entry to be deleted. PCNumberEntry = InputBox("Enter the number of the PC you wish to remove:", "Delete PC Entry", "PC 1", vbOKCancel) 'Closes inputbox when cancel is pressed. If PCNumberEntry = "" Then Exit Sub End If 'Searches worksheet column "A" and finds any existing PC entries. Set r = Sheet1.Range("A:A") For Each c In r 'Checks for matching entry in worksheet to begin delete sequence. If (c.Value) = PCNumberEntry Then m = True 'Asks for confirmation from user before deleting entry. Confirm = MsgBox("Warning! Once deleted, an entry cannot be restored! Only proceed if you are sure you wish to delete a row.", vbYesNo Or vbExclamation) 'Cancels delete operation when "No" button is pressed. If Confirm = vbNo Then Exit Sub End If 'Deletes entry and informs user of successful operation. If cellsToDelete Is Nothing Then Set cellsToDelete = c Call cellsToDelete.EntireRow.delete MsgBox ("The entry was deleted.") End If End If Next c 'Displays error message if no matching entry is found. If m = False Then MsgBox ("No entry with that number was found!") End If On Error Resume Next 

结束小组