Excel VBA - 将信息提取到用户表单以更新

时间:2017-01-31 05:14:28

标签: excel vba excel-vba

我正在尝试创建一个userform,允许用户更新存储在特定工作表中的问题(称为“问题列表”)。我使用数据验证构建了一个下拉列表,允许用户从列表中选择唯一的问题名称。我在该下拉列表旁边创建了一个按钮,用于打开userform并正确导入从下拉列表中识别的问题名称。

我需要弄清楚的是,当用户表单启动时,如何在我的“问题列表”表中搜索列B并确定哪一行包含用户选择的问题,并填写用户表单的字段使用“问题列表”表格的行CX中找到的信息。

我一直在尝试使用的是索引匹配功能,但在使代码无法工作方面却没有成功。我一直在使用的一个例子是:

Resolved.Value = Application.WorksheetFunction.index
('Issue List'!$X$2:$X$1000,Application.WorksheetFunction.match
('Priority Table'!I35,'Issue List'!$B$2:$B$1000,0))

非常感谢任何帮助。

提前致谢!

1 个答案:

答案 0 :(得分:1)

在VBA中使用工作表函数时,仍然必须使用VBA语言传递范围:

所以而不是:

'Issue List'!$X$2:$X$1000
你会用:

Worksheets("Issue List").Range("X2:X1000")

而不是:

'Priority Table'!I35

只需使用:

Worksheets("Priority Table").Range("I35")

请注意,您还可以按名称引用范围,这可以使编码更容易,也更安全。在电子表格中插入行时,Excel不会自动更新任何VBA代码中的范围。对I35的引用总是I35。

相反,在Excel中正常定义单元格I35的名称,然后在代码中引用它。

例如,如果您将I35命名为"问题"

您可以通过以下方式参考单元格:

Range("Issue")

(如果它是一个全局变量,只要它是工作簿中的唯一名称,它就是默认值,您不需要使用表格("优先级表&#34) ;)限定符。

有关如何从VBA引用Excel中的范围的详细信息,请参阅此文档: https://msdn.microsoft.com/en-us/library/office/gg192736(v=office.14).aspx