【发布时间】:2017-07-03 19:08:52
【问题描述】:
在另一个问题的回答中,我看到了一个验证列表条目的建议示例:
With rng.Validation
.Delete 'delete previous validation
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Formula1:="='" & ws.Name & "'!" & range1.Address
End With
这很好用,但如果可能的话,与其在 Formula1 中包含工作表的名称,我宁愿包含 Excel 对象名称(例如 Sheet1、Sheet2 等)。这样,如果有人选择重命名工作表,那么宏仍然可以在未经编辑的情况下工作。
这可能吗?如果可以,请问将其包含在 Formula1 中的最佳方法是什么?
【问题讨论】:
-
命名范围默认对工作簿是全局的,不需要工作表名称
-
如果有人重命名工作表,该宏仍然有效。只是名称更改后验证将不起作用,因为最初运行的 Formula1 结果在之后将不正确。重新运行宏会立即解决这个问题。
Formula1采用字符串格式的“常规” excel 公式,因此无法使用对象的名称。 -
编辑:我的错 - 实际上,当用户更改工作表名称时,Excel 会自动更新公式。您发布的代码只是从工作表变量中获取名称。根本没有必要参考其他任何东西。换句话说,“这样,如果有人选择重命名工作表,那么宏在未经编辑的情况下仍然可以工作。” - 这不适用。
-
原谅我,我是新手。我现在创建了一个小测试,在我的版本中,当我更改工作表名称、保存并关闭工作簿并重新打开它时,宏失败了。
-
我怀疑我错误地设置了 WS.name - 我使用了“Dim WS As Worksheet”,然后使用了“Set WS = ThisWorkbook.Worksheets("Configuration")”。当我将工作表的名称从“配置”更改为“埃里克”(我知道,我知道)我得到“运行时错误'9':”“下标超出范围”
标签: excel validation excel-2010 vba