索引匹配多个条件vba以创建userform

时间:2014-12-19 15:27:18

标签: vba match lookup userform

我正在尝试为包含超过150个标签的电子表格创建数据输入工具。每个选项卡或工作表具有相同的布局,并代表不同的公司。数据将根据两个变量输入到C列或D列:类型,或,从两个组合框输入获得的值。选项卡或公司由列表框找到。

我想使用 Index-Match 返回行号作为cells方法的输入,以输入数据。我搜索了几个网站,包括这里。与我的代码的区别在于我正在尝试使用嵌套函数和组合框值来进行赋值。这是我的代码:(包括选择相关标签的步骤)

Private Sub EnterCommandButton_Click()
'Activate relevant sheet and go to first tab via Goto function call
'Double check Sheets property regarding name and listbox values
Application.Goto Sheets("MgrListBox.Value").Range("$C$6:$F$93")

'Transfer Information
Cells(WorksheetFunction.Row(Index("C6:F93", Match(1,("C6:C93" = _
   TypeComboBox.value)*("D6:D93" = ItemsComboBox.value),0),3),5).Value = _
   LongTextBox.Value

Cells(WorksheetFunction.Row(Index("C6:F93", Match(1,("C6:C93" = _
   TypeComboBox.value)*("D6:D93" = ItemsComboBox.value),0),3),6).Value =
   ShortTextBox.Value
End Sub

1 个答案:

答案 0 :(得分:0)

这可能无法直接回答你的问题,但我无法将其纳入评论中 您的代码有很多问题。

首先,您无需Goto即可访问您的工作表 第二,使用WorksheetFunction与在单元格上分配或编写公式不同。
在子文件中使用有效范围或数组对象/变量来执行它而不是字符串相当于它 这一行:

Cells(WorksheetFunction.Row(Index("C6:F93", Match(1,("C6:C93" = _
   TypeComboBox.value)*("D6:D93" = ItemsComboBox.value),0),3),5).Value = _
   LongTextBox.Value

会抛出错误。此外,我不确定它是否可以像在单元格中输入数组值一样存储数组值。
您可以尝试使用Evaluate Function这样的方法:

Cells(WorksheetFunction.Row(Evaluate("Index(C6:F93, Match(1,(C6:C93 = " & _
   TypeComboBox.value & ")*(D6:D93 = " & ItemsComboBox.value & "),0),3)"), _
   5).Value = LongTextBox.Value

Evaluate会将字符串公式视为单元格中的正常公式 考虑到你的公式背后的逻辑是正确的并且将返回一个数字,它将起作用 同样,我不确定这是否会对你有所帮助,但我希望它能帮到你。