Excel VBA:通过单元格值引用其他工作表的实现问题
VBA通过单元格字符串引用工作表的正确写法
你的代码核心问题是给Worksheet对象赋值时缺少Set关键字,VBA中所有对象类型的变量赋值都必须用Set,否则会触发语法错误。另外,需要明确指定Cells的父工作表(主表Wrksheet1),避免当前活动工作表切换导致的读取错误。
修正后的完整代码
Dim SheetNameString As String Dim SheetWork As Worksheet Dim i As Integer ' 绑定主工作表,避免活动表变化影响读取 With ThisWorkbook.Worksheets("Wrksheet1") For i = 3 To 15 SheetNameString = .Cells(3, i).Value ' 先判断目标工作表是否存在,避免名称错误导致崩溃 On Error Resume Next Set SheetWork = ThisWorkbook.Worksheets(SheetNameString) On Error GoTo 0 If Not SheetWork Is Nothing Then ' 执行你的判断逻辑 If SheetWork.Cells(i + 4, 8).Value = "blah" Then ' 这里写入你的处理代码,示例: ' .Cells(i, 10).Value = "符合条件" End If ' 清空对象变量,避免循环残留 Set SheetWork = Nothing Else ' 可选:处理工作表名称不存在的情况 .Cells(i, 11).Value = "工作表不存在" End If Next i End With
关键点说明
- 必须用
Set赋值对象:Set SheetWork = ThisWorkbook.Worksheets(SheetNameString)是正确的对象赋值方式,你之前的写法遗漏了Set,会触发"对象变量未设置"错误。 - 明确父工作表:用
With块绑定Wrksheet1,所有.Cells操作都归属该表,不会因为点击其他工作表而出错。 - 错误防护:加入
On Error和If Not SheetWork Is Nothing,避免单元格内的工作表名称写错或工作表被删除导致代码崩溃。
你之前的错误写法分析
- 第一种写法缺少
Set关键字,直接赋值对象变量不符合VBA语法。 - 第二种写法用
Sheets("SheetNameString")是在查找名为"SheetNameString"的工作表,而非变量SheetNameString存储的字符串值,完全偏离需求。
内容的提问来源于stack exchange,提问作者celia_123
相关产品推荐
相关产品推荐

