Excel VBA:从表单控件获取值
在工作表Excel VBA:从表单控件获取值,vba,user-controls,excel,Vba,User Controls,Excel,在工作表sheet1中嵌入了一个名为combobox\u test的表单控件组合框,它选择了值x 除此之外,我还添加了一个按钮,当我按下它时,我希望它获取combobox\u test的值,并将其放置在something.Rows(y)中。但是我不能让它工作,我有点沮丧。也许你能给我指出正确的方向 Sub ButtonPressed_sample() Dim value As String Set putItRng = Range("theCells")
sheet1
中嵌入了一个名为combobox\u test
的表单控件组合框,它选择了值x
除此之外,我还添加了一个按钮,当我按下它时,我希望它获取combobox\u test
的值,并将其放置在something.Rows(y)
中。但是我不能让它工作,我有点沮丧。也许你能给我指出正确的方向
Sub ButtonPressed_sample()
Dim value As String
Set putItRng = Range("theCells")
putItRng.Rows(1) = ActiveSheet.Shapes("combobox_test").Value
End Sub
有什么建议吗?我是VBA的绝对初学者,所以请尽可能详细。谢谢
putItRng.Rows(1)= ActiveSheet.combobox_test.value
尝试:
如果它不起作用,那么您的组合框就不会被命名为“combobox\u test”我不确定这是您想要的,但这是一个开始。形状对象没有值属性,这是错误的来源。有一个已弃用但仍然可用的下拉对象
Sub ButtonPressed_sample()
Set putitrng = Range("theCells")
putitrng.Rows(1) = ActiveSheet.DropDowns("combobox_test").value
End Sub
如前所述,形状组合框没有值属性 我使用Shape对象的DrawingObject属性来获取一个复选框FormControl对象。然后,可以像使用任何其他FormControl一样使用此复选框对象 您还应该能够使用DrawinObject从Shape对象中获取ComboBox对象集 如果要获取选定的文本,可以尝试剪切以下代码:
Dim sh as Shape
Dim cB as ComboBox
For Each sh In ws.Shapes
If sh.Type = msoFormControl Then
If TypeOf sh.DrawingObject Is ComboBox Then
Set cB = sh.DrawingObject
...
your code for getting the Data from ComboBox
...
End If
End If
Next
谢谢你一直在争论这个话题,但这个话题给了我一个答案。我不知道method1和method2引用类型有什么区别,可以使用
.value |.List
属性读取值。如果有一个完全类型化的obj变量就好了
Dim obj As Object
Set obj = ws.DropDowns("combo1") ' method 1
Set obj = ws.Shapes("combo1").ControlFormat ' method 2
Debug.Print obj.value & "|" & obj.List(obj.value) ' 1...n|Text1,Text2,..n
运行时错误
438
。对象不支持此属性或方法。。。它显示了行putItRng.Rows(1)=ActiveSheet.Shapes(“组合框测试”)。值您必须通过ActiveWorkbook.ActiveSheet引用('因为多个工作簿每个都有一个ActiveSheet')。行(1)提供了行1中所有列的整个范围。。。一步一步来。尝试使用两个Msgbox查找问题的真正根源,一个用于上述建议作业的左侧,另一个用于右侧。这将更好地查明问题所在。我猜您的对象命名是错误的。请注意,不推荐使用下拉列表(以及组合框、按钮等),因为如果您选择将多个形状分组在一起,则分组中的控件不会出现在这些集合对象中。因此,我想这条评论只是一个警告,不要将控件放入任何分组形状中,只要您使用此方法(我自己也使用此方法):)虽然这可以回答问题,但最好解释为什么它是正确的解决方案。投票率最高的答案引用下拉列表,但是Alain提到这是不推荐的,因为“如果您选择将多个形状分组在一起,则分组中的控件不会出现在这些集合对象中”。shapes集合是引用combobox表单控件的另一种方法,但是Carlos post对我不起作用。我只是尝试了ActiveSheet.shapes(“combobox\u test”).ControlFormat.Value
,发现它得到了相同的结果。一些场景可能会发现这是一种更合适的编码风格。谢谢。完美的
ActiveSheet.Shapes("combobox_test").ControlFormat.ListIndex
Dim sh as Shape
Dim cB as ComboBox
For Each sh In ws.Shapes
If sh.Type = msoFormControl Then
If TypeOf sh.DrawingObject Is ComboBox Then
Set cB = sh.DrawingObject
...
your code for getting the Data from ComboBox
...
End If
End If
Next
Dim obj As Object
Set obj = ws.DropDowns("combo1") ' method 1
Set obj = ws.Shapes("combo1").ControlFormat ' method 2
Debug.Print obj.value & "|" & obj.List(obj.value) ' 1...n|Text1,Text2,..n