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

VBA遍历D6至第6行行尾添加字典键报91错误如何修复

VBA运行触发91错误修复方案

错误原因

运行时错误91是对象变量未设置/未实例化,你的代码存在3个核心问题:

  1. With tg块里的tg对象没有提前声明、也没有通过Set赋值,VBA找不到对应工作表对象,是触发91错误的直接原因。
  2. 遍历范围参数完全错位:Cells的参数规则是(行号, 列号),你写的.Cells(.Columns.Count, 2).End(xlToLeft)实际是取B列最后一行位置向左查找非空单元格,和你要遍历第6行D列向右区域的需求完全不符。
  3. 声明的Dim i As Long变量从未被调用,属于冗余代码。

修复步骤

  • 补充tg工作表变量的声明与赋值:如果操作当前激活的工作表就写Set tg = ActiveSheet,如果操作指定名称的工作表就写Set tg = ThisWorkbook.Worksheets("你的工作表实际名称")
  • 修正遍历范围逻辑:第6行最右侧非空单元格的正确写法是.Cells(6, .Columns.Count).End(xlToLeft),行号固定为6,从最大列位置向左查找非空值作为遍历终点
  • 可选:删除未使用的i变量声明,精简代码

修复后完整代码

Function list()
    Dim currCell As Range
    Dim dict As Object
    Dim tg As Worksheet ' 补充缺失的工作表对象声明
    Set dict = CreateObject("Scripting.Dictionary")
    ' 赋值要操作的工作表,可根据实际需求替换为指定工作表
    Set tg = ActiveSheet

    With tg
        ' 修正遍历范围:从D6开始,到第6行最右侧非空单元格截止
        For Each currCell In .Range("D6", .Cells(6, .Columns.Count).End(xlToLeft))
            If Not dict.Exists(currCell.Value) And Not IsEmpty(currCell) Then
                dict.Add currCell.Value, ""
            End If
        Next currCell
    End With

    Set list = dict
End Function

补充边界处理提示:如果第6行D列右侧完全没有内容,.End(xlToLeft)会定位到D列左侧的单元格,导致遍历范围反向。如果需要强制至少遍历D6单元格,可以提前判断终点列号,若列号小于4(D列对应列号为4),就把遍历终点手动设为D6即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 00:48:19