首页 > 解决方案 > 打开文档或更新时执行代码(填充列表框)?

问题描述

我很难学习 VBA。从基础到更高级的东西没有明确的指南。我知道编码,但理解 VBA 中的对象模型和事件系统对我来说有点混乱。

我只想做一些花费我太长时间的简单事情,比如在 Office 2002 中填写一个列表框(您嵌入在工作表中的那个,而不是用户表单)。我希望每次在文档时默认填写列表框打开,列表的来源更改等。

我尝试在程序内部的工作表中编写代码,在程序外部编写代码,但没有任何效果。例如,当我没有为 mouseover 事件编写代码时,我将鼠标悬停在列表框上,代码执行时出现编译错误。

我直接在工作表中写了

ListBox1.AddItem "test"
ListBox1.AddItem "test 2"

ETC...

我除了它会工作,但不能也看不到我可以在 Excel for Worksheets 中找到所有事件的位置。VBA 编辑器内的下拉菜单设置为“常规”和“声明”,第二个中没有更多选项。

标签: excelvbalistbox

解决方案


您偶然发现了 Excel 的对象模型不涵盖正常使用的部分之一。
这些列表框的数据源是在控件上设置的范围-
右键单击​​控件-格式化控件... -控件-输入范围
在这里您可以手动将其设置为一个范围,例如 $A$1:$A$3,但是这会给控制带来一些问题,所以请这样做:

  1. 在工作簿的工作表上创建选项列表
  2. 选择该范围并为其命名
  3. 将该名称设置为列表框的输入范围
  4. 当您需要向列表框添加值时,只需重新定义命名范围。

第 4 步的代码如下所示:

Dim RowCount As Integer
With ActiveWorkbook.Names("OptionList")
    RowCount = .RefersToRange.Rows.Count + 1
    .RefersTo = .RefersToRange.Resize(RowCount)
    .RefersToRange(RowCount) = "New value"
End With

推荐阅读