VBA使用变量引用工作表时报运行时错误9如何修复
报错原因
- 核心触发点为
Range("C2").Value返回的是日期类型数据,直接拼接字符串时,VBA会调用系统默认短日期格式完成类型转换,最终生成的字符串与工作表实际名称Action List 11-24-2021不匹配,无法定位到对应工作表触发运行时错误9。 - 原有代码中先选中工作表再设置可见性的操作属于冗余操作,反而会提升报错概率。
修复方案
推荐使用Format函数强制指定日期输出格式,稳定性更高,不受单元格显示格式影响,修复后代码如下:
Sub StartMedCount() Dim actionname As String ' 强制将C2的日期值格式化为mm-dd-yyyy格式后拼接 actionname = "Action List " & Format(Sheets("MedicationCounts").Range("C2").Value, "mm-dd-yyyy") ' 直接操作工作表对象设置可见性,无需选中 ThisWorkbook.Worksheets(actionname).Visible = False End Sub
如果需要适配单元格当前显示的格式,也可以替换为获取单元格Text属性的写法:actionname = "Action List " & Sheets("MedicationCounts").Range("C2").Text
可选容错优化
如果需要避免工作表不存在时的报错,可以增加存在性判断逻辑:
Sub StartMedCount() Dim actionname As String Dim ws As Worksheet actionname = "Action List " & Format(Sheets("MedicationCounts").Range("C2").Value, "mm-dd-yyyy") For Each ws In ThisWorkbook.Worksheets If ws.Name = actionname Then ws.Visible = False Exit Sub End If Next ' 未找到对应工作表时的提示 MsgBox "目标工作表 " & actionname & " 不存在,操作已取消" End Sub
内容的提问来源于stack exchange,提问作者Sarah
相关产品推荐
相关产品推荐

