excel - 打开文档或更新时执行代码(填充列表框)?
问题描述
我很难学习 VBA。从基础到更高级的东西没有明确的指南。我知道编码,但理解 VBA 中的对象模型和事件系统对我来说有点混乱。
我只想做一些花费我太长时间的简单事情,比如在 Office 2002 中填写一个列表框(您嵌入在工作表中的那个,而不是用户表单)。我希望每次在文档时默认填写列表框打开,列表的来源更改等。
我尝试在程序内部的工作表中编写代码,在程序外部编写代码,但没有任何效果。例如,当我没有为 mouseover 事件编写代码时,我将鼠标悬停在列表框上,代码执行时出现编译错误。
我直接在工作表中写了
ListBox1.AddItem "test"
ListBox1.AddItem "test 2"
ETC...
我除了它会工作,但不能也看不到我可以在 Excel for Worksheets 中找到所有事件的位置。VBA 编辑器内的下拉菜单设置为“常规”和“声明”,第二个中没有更多选项。
解决方案
您偶然发现了 Excel 的对象模型不涵盖正常使用的部分之一。
这些列表框的数据源是在控件上设置的范围-
右键单击控件-格式化控件... -控件-输入范围
在这里您可以手动将其设置为一个范围,例如 $A$1:$A$3,但是这会给控制带来一些问题,所以请这样做:
- 在工作簿的工作表上创建选项列表
- 选择该范围并为其命名
- 将该名称设置为列表框的输入范围
- 当您需要向列表框添加值时,只需重新定义命名范围。
第 4 步的代码如下所示:
Dim RowCount As Integer
With ActiveWorkbook.Names("OptionList")
RowCount = .RefersToRange.Rows.Count + 1
.RefersTo = .RefersToRange.Resize(RowCount)
.RefersToRange(RowCount) = "New value"
End With
推荐阅读
- go - 将struct转换为YAML文件golang,如何避免yaml输出中的空引号?
- c - 管道(),叉子();执行();我为 `cat | 寻找与 bash 相同的行为。ls`
- python - 使用 Python 和 Snowflake 进行列匹配
- r - 使用 R 为子集数据创建循环
- audio - 如何反转滑块的这个 ln 幂函数?
- node.js - 从 Nodejs8.x 升级到 Nodejs10.x 或 Nodejs12.x 出现错误 - 找不到模块“is-buffer”
- mysql - 许多查询并行运行。提交一个查询会影响其他所有查询吗?
- xaml - 如何阻止 Xamarin 初始化 XAML 中的每个视图?
- kubernetes - 模板 Chart.yaml 文件
- r - R分别对开始和结束向量列表进行向量化比较