【问题标题】:Excel-VBA: Getting the values from Form ControlsExcel-VBA:从表单控件中获取值
【发布时间】:2010-11-18 21:29:04
【问题描述】:

嵌入工作表sheet1 我有一个名为combobox_test 的表单控件组合框,它具有选定的值x

除此之外,我还嵌入了一个按钮,当我按下它时,我希望它获取combobox_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 的绝对初学者,所以请尽可能详细。谢谢

【问题讨论】:

  • 运行时错误438。对象不支持此属性或方法...并显示行putItRng.Rows(1) = ActiveSheet.Shapes("combobox_test").Value

标签: vba user-controls excel


【解决方案1】:
   Sub QuickSelect_Change()
        With ActiveSheet.Shapes("QuickBox")
            MsgBox "My Selected Value " & .ControlFormat.List(.ControlFormat.ListIndex)
        End With
    End Sub

【讨论】:

  • 谢谢。完美!
【解决方案2】:

我不确定这是否是您想要的,但这是一个开始。 Shape 对象没有 Value 属性,这是错误的来源。有一个 DropDown 对象已被弃用,但仍然可用。

Sub ButtonPressed_sample()

    Set putitrng = Range("theCells")
    putitrng.Rows(1) = ActiveSheet.DropDowns("combobox_test").value

End Sub

【讨论】:

  • 注意,下拉菜单(和组合框、按钮等)已被弃用,因为如果您选择将多个形状组合在一起,组中的控件不会出现在这些集合对象中。所以我想这个评论只是一个警告,不要把你的控件放到任何分组的形状中,只要你使用这个方法(我自己也使用):)
【解决方案3】:
ActiveSheet.Shapes("combobox_test").ControlFormat.ListIndex

【讨论】:

  • 虽然这可以回答问题,但最好解释一下为什么它是正确的解决方案。
  • 投票最高的答案引用了 DropDowns 集合,但 Alain 提到这已被弃用,因为“如果您选择将多个形状组合在一起,则分组中的控件不会出现在这些集合对象中”。形状集合是引用组合框表单控件的另一种方法,但 Carlos 的帖子对我不起作用。
  • 我刚刚尝试了ActiveSheet.Shapes("combobox_test").ControlFormat.Value,发现它得到了相同的结果。在某些情况下,这可能是一种更合适的编码风格。
【解决方案4】:
putItRng.Rows(1)= ActiveSheet.combobox_test.value

试试:

activesheet.cells(1,putItRng.column).value=activesheet.combobox_test.value

如果它不起作用,那么您的组合框未命名为“Combobox_test”

【讨论】:

  • 您必须通过 ActiveWorkbook.Activesheet 引用(因为多个工作簿每个都有一个 Activesheet)。 Rows(1) 为您提供了第 1 行中所有列的整个范围...在此逐步进行。尝试使用两个 Msgbox 找到问题的真正根源,一个用于左侧,另一个用于上述建议分配的右侧。这将更好地查明问题所在。我猜你的对象命名是错误的。
【解决方案5】:

如前所述,Shape ComboBox 没有 Value 属性。

我使用 Shape 对象的 DrawingObject 属性来获取 CheckBox FormControl 对象。然后可以像使用任何其他 FormControl 一样使用此 CheckBox 对象。

您还应该能够使用 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

【讨论】:

    【解决方案6】:

    感谢一直在与这个斗争,但这个话题给了我一个答案。我不知道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
        
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 2014-11-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多