You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

关键点说明

  1. 必须用Set赋值对象:Set SheetWork = ThisWorkbook.Worksheets(SheetNameString)是正确的对象赋值方式,你之前的写法遗漏了Set,会触发"对象变量未设置"错误。
  2. 明确父工作表:用With块绑定Wrksheet1,所有.Cells操作都归属该表,不会因为点击其他工作表而出错。
  3. 错误防护:加入On Error和If Not SheetWork Is Nothing,避免单元格内的工作表名称写错或工作表被删除导致代码崩溃。

你之前的错误写法分析

  • 第一种写法缺少Set关键字,直接赋值对象变量不符合VBA语法。
  • 第二种写法用Sheets("SheetNameString")是在查找名为"SheetNameString"的工作表,而非变量SheetNameString存储的字符串值,完全偏离需求。

内容的提问来源于stack exchange,提问作者celia_123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 12:01:05