cke*_*ann 5 excel vba combobox
我对VBA很陌生,而且我一直在努力填充组合框.我正在尝试使用电子表格中第一列的内容填充组合框,以便我可以根据组合框选择删除关联的数据行.
在提出这个问题时,我已经在这里和其他地方查看了几个问题,但我没有发现任何有用的东西.
以下是我尝试过的代码.我有点失落,因为我一直试图拼凑其他问题的不同答案,以使这个工作,但无济于事.我希望组合框填充第1列的值,但它仍然是空白的.
尝试#1这涉及创建动态范围:
=OFFSET(PC_DataSheet!$A$2,0,0, COUNTA(PC_DataSheet!$A$1:$A$65536)-1,1)
Run Code Online (Sandbox Code Playgroud)
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
Run Code Online (Sandbox Code Playgroud)
尝试#2
Private Sub UserForm1_Initialize()
Dim arr() As Variant
arr = Worksheets("Sheet1").Range("C2:" & lrow).Value
PC_ListComboBox.List = arr
End Sub
Run Code Online (Sandbox Code Playgroud)
尝试#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
Run Code Online (Sandbox Code Playgroud)
任何有关这方面的帮助将非常感谢!
编辑:我已经尝试将Gary的学生建议的代码插入我的UserForm_Initialize()Sub,但是当我尝试打开userform时,我收到以下错误消息:
运行时错误'9':下标超出范围
当我单击debug时,它会突出显示以下代码:
'Opens PC UserForm when pressed.
Private Sub AddPCButton_Click()
UserForm.Show 'This line is the line highlighted by the debugger.
End Sub
Run Code Online (Sandbox Code Playgroud)
我不知道是什么导致这个...当我使用建议的代码时,我收到一条错误消息,但是当我删除代码时,userform功能完美无瑕.这里是Private Sub UserForm_Initialize(),包含和不包含建议的代码.
'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
Run Code Online (Sandbox Code Playgroud)
这包括建议的代码:
'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
Run Code Online (Sandbox Code Playgroud)
这是一个创建和填充Forms样式组合框的超级简单示例:
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
Run Code Online (Sandbox Code Playgroud)
例如:
编辑#1
我创建了一个名为Demo的UserForm,其中包含一个名为MyBox的组合框
在标准模块中我放了:
Sub DisplayIt()
Demo.Show
End Sub
Run Code Online (Sandbox Code Playgroud)
并在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
Run Code Online (Sandbox Code Playgroud)
运行DisplayIt()会产生:
这是基于本教程