excel - 如何输入通过表名的传递,以便宏不受一个工作表的限制?
问题描述
我正在尝试整理一个工作表,如果我单击顶部的按钮,它将通过我的条件格式,并插入一个新行。但是,我通过代码中的表名称输入,所以如果我尝试复制工作表或尝试在另一张表上运行宏,它会中断。
我将代码放在 ** 中围绕我正在考虑的更改,但是我不知道如何在Set行上传递它。
请帮忙!!
例子:
Dim ws As Worksheet
**Dim tbl As ListObject**
Set ws = ActiveSheet
**Set tbl = ws.ListObjects(1)** <-- This lets me get the table name if this worksheet is copied.
Dim rng As Range
Set rng = ws.[TableName[ColumnName]]
**Set rng = ws.[tbl[ColumnName]]** <- If I do this it Breaks.
解决方案
我认为您实际上不能在 VBA 中使用结构化引用。至少,我试图尝试的努力一直都失败了。因此我使用如下所示的代码。
Private Sub Test1()
Dim Ws As Worksheet
Dim Rng As Range
Dim Tbl As ListObject
Set Ws = ActiveSheet
Set Tbl = Ws.ListObjects(1)
Set Rng = Tbl.ListColumns("Pair").Range
Debug.Print Rng.Address
End Sub
Private Sub Test2()
Dim Ws As Worksheet
Dim Rng As Range
Dim Tbl As ListObject
Set Ws = ActiveSheet
Set Tbl = Ws.ListObjects(1)
Set Rng = Tbl.DataBodyRange.Columns(2)
Debug.Print Rng.Address
End Sub
在第一个示例中,您可以使用列名称 - 如果您愿意,可以将实际名称替换为字符串数据类型的变量 - 但您会得到 ListColumn 的范围。第二个示例使用索引号来标识列,但您获得的 DataBodyRange 列不包括标题和总行。
推荐阅读
- python - Tkinter Button - 如何使用单个模块为不同的按钮获取值并显示它
- python-3.x - 使用 .title() 方法格式化用户输入
- git - 如何在本地拉远程更改而忽略git中的本地更改?
- ios - 将数据发布成这种格式?
- javascript - 是否可以通过 javascript 运行 java 编译的程序?
- javascript - 如何处理来自服务器的空 json 响应
- json - 在 VB 中调用 REST 服务时出现内部服务器错误 500
- php - 在 PHP 中对 SPL 集合进行排序的正确方法
- c# - HTTP Post 使用提交按钮将信息从 HTML.BeginForm 发布到控制器
- c# - SQL Server 和实体框架:事务在一个用例中失败