如何在VBA中使用字符串变量引用用户命名的工作表?
用字符串变量引用VBA工作表的解决方案
核心问题分析
- 错误91的根源:
Sheet_title是Worksheet对象类型,直接把字符串Title赋值给它会报错——对象类型变量必须用Set关键字完成赋值。 - Sheets(Title)调用失败:大概率是
Title的值和实际工作表名称不匹配(比如包含空格、大小写差异,或者目标工作表不存在),另外代码里混用Title和title(VBA不区分大小写,但尽量保持一致更规范)。 - 冗余的Select操作:VBA里应尽量避免
Select/ActiveCell这类操作,直接通过工作表+单元格的方式引用,既高效又能减少意外错误。
修正后的代码
Dim Title As String Dim Sheet_title As Worksheet ' 直接读取Config工作表C25的值,无需激活/选择 Title = Sheets("Config").Range("C25").Value Debug.Print Title ' 用Set关键字给Worksheet对象赋值,同时捕获可能的错误 On Error Resume Next Set Sheet_title = ThisWorkbook.Sheets(Title) On Error GoTo 0 ' 判断目标工作表是否存在 If Not Sheet_title Is Nothing Then ' 直接完成数据赋值,无需切换工作表 Sheets("Results").Range("B7") = Sheet_title.Range("E8").Value Else MsgBox "名为""" & Title & """的工作表不存在!" End If
关键改进点
- 移除所有
Select操作,直接通过工作表名称定位单元格,避免激活状态变化带来的逻辑错误。 - 用
Set关键字正确完成Worksheet对象的赋值。 - 添加工作表存在性判断,提前拦截因名称错误导致的运行时异常。
- 使用
ThisWorkbook.Sheets明确指定当前工作簿,防止误引用其他打开的工作簿。
内容的提问来源于stack exchange,提问作者Alex Band
相关产品推荐
相关产品推荐

