【问题标题】:Reading columns and rows from a sheet and bind to combo box VBA从工作表中读取列和行并绑定到组合框 VBA
【发布时间】:2018-02-04 19:49:11
【问题描述】:

我是 VBA 的初学者。我有一个方案来确定在同一工作簿的另一个工作表中设计的自定义表单中绑定和操作来自不同工作表的数据的完美方式。

有两张纸,一张是不同年份的水果名称,另一张是每年的数量。

这是表格 1 的数据。

基于此,我需要将这些年份绑定到一个下拉列表,将水果绑定到另一个下拉列表(基于年份,它应该动态加载)。由于我以前在 .NET 方面的经验,因此如果我们将所有内容视为数据表,则可以使用一些过滤器或仅使用一些循环或使用 LINQ 轻松操作任何内容。但是在 VBA 中,我们如何根据这些数据处理这些绑定和操作。此外,如果行不能总是在特定的单元格范围内,可能会有更多。那么我们如何处理动态数据呢。

基于this link我尝试的绑定如下

Dim vArr as Variant
Dim i as Integer
vArr = WorksheetFunction.Transpose(Sheets(2).Range("A2:A10").value)
With Sheets(1).OLEObjects("ComboBox1").Object
     .Clear
     For i = Lbound(vArr) to Ubound(vArr)
        .AddItem vArr(i)
     Next i
End With 

【问题讨论】:

  • 这不是将您的年数添加到您的组合框中吗?看起来它应该对我有用。
  • 对不起.. 很好.. 没有问题.. 但我的问题是,如果没有特定的结束单元格,我们如何才能做到这一点.. 就像动态数据一样。另外,如果我需要根据第一个下拉列表中选择的年份加载第二个下拉列表,是否有任何简单的解决方案,例如 Selecting all rows where year is that selected year in dropdown 1

标签: vba excel


【解决方案1】:

你真的不应该在同一个问题中问两个问题......但是因为你这样做了,我至少可以回答你的第二个问题:

"...如果行不能总是在特定的单元格范围内,可能会有更多。那么我们如何处理动态数据"

你可以使用这个函数来抓取最后一行:

Public Function lastRow(ByVal ws As Worksheet, Optional ByVal col As Variant = 1) As Long
    lastRow = ws.Cells(ws.Rows.Count, col).End(xlUp).Row
End Function

你可以这样使用:

Range("A2:A" & lastRow(Worksheets(2)))

现在,当你让你的第一个问题更有意义时,我会更新我的答案。

【讨论】:

  • 所以它用于动态数据。不是吗..我会试试这个,然后告诉你。谢谢..
猜你喜欢
  • 2018-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-03-16
  • 1970-01-01
  • 2017-02-16
  • 1970-01-01
相关资源
最近更新 更多