如何使用查找表填充组合框

时间:2016-06-09 15:20:37

标签: excel-vba vba excel

我正在尝试使用来自命名表格的值填充组合框。我一直在努力并设法提出以下代码:

Dim Arr() As Variant
Arr = Range("SourceTable")
SourceBox.List = Arr

这将使用表SourceTable的第1列中的值填充组合框,该表存在2列。我有以下问题:

  • 是否有类似于HTML(我来自webdev背景)的东西,您可以设置元素的名称并存储单独的值?
  • 有没有办法存储第二列而不是第一列,如上面的代码?
  • 你如何重构这段代码,因为它似乎是一个填充单个ComboBox的弯路

由于

3 个答案:

答案 0 :(得分:2)

您使用的ActiveX组合框对象支持多列。它默认为1。列也可以设置其宽度。所以你想要做的是将它设置为使用两列,然后设置它们的宽度以隐藏第一列并显示第二列。类似的东西:

Sub loadcombo()
    Dim Arr() As Variant
    Arr = Range("SourceTable")
    SourceBox.ColumnCount = 2
    SourceBox.ColumnWidths = "0;1"
    SourceBox.List = Arr
End Sub

然后,您可以使用comboBox的value属性获取第一个隐藏列及其text属性,以获取您要显示的第二列:

Private Sub SourceBox_Change()
    'subroutine to fire on combobox change event
    'print the value (hidden) and the text (shown) to debugger for fun and profit
    Debug.Print SourceBox.Value, SourceBox.Text
End Sub

答案 1 :(得分:0)

获得第二列的最简洁方法是

SourceBox.List = Range("SourceTable[Column2]").Value

通过设置名称和存储值,我不太清楚你的意思。您可以使用词典,虽然您需要澄清,但您可以使用内置名称集合进行澄清。

答案 2 :(得分:0)

它应该是这样的。

Sub passValueToComboBox1()
   Dim ie  As Object
   Dim oHTML_Element As IHTMLElement

   Set ie = CreateObject("InternetExplorer.Application")
   ie.Visible = True
   ie.navigate "http://your_URL_here.php"
   While ie.Busy Or ie.readyState <> 4: DoEvents: Wend

   Set oHTML_Element = ie.document.getElementsByName("selectedReportClass")(0)
   If Not oHTML_Element Is Nothing Then oHTML_Element.Value = "FUBU7"

   For Each oHTML_Element In ie.document.getElementsByTagName("input")
      If oHTML_Element.Type = "submit" Then oHTML_Element.Click: Exit For
   Next
End Sub

最简单的方法是点击键盘上的F12,这样你就可以看到页面背后的HTML。按名称标识ComboBox(当您将鼠标悬停在HTML代码上时将突出显示)或ID(0,1,2等)。然后,只需将值直接传递给ComboBox。

试一试,看看它是怎么回事。

最后,如果F12没有做任何事情,请下载并安装IE工具栏。

https://www.microsoft.com/en-us/download/details.aspx?id=32987