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

VBA代码报错91:计数7个填充txtDp文本框并计算金额求解决

解决VBA错误91及文本框计数逻辑问题

嘿,我来帮你搞定这个错误91的问题,顺便把逻辑理清楚~

首先说错误91的直接原因:当For Each循环结束后,ctrl变量已经不再指向任何有效的控件对象(变成Nothing了),这时候你执行txtEx.Value = ctrl * 10.5,自然会触发“对象变量或With块变量未设置”的错误。

另外你的代码逻辑还有几个小问题:

  • 名称判断出错:txtDp是5个字符,你用Left(ctrl.Name, 6)会多取一位,导致匹配不到正确的控件
  • 计数逻辑有问题:你试图用cont递增去匹配控件名,但如果控件顺序不对或者命名不是严格的txtDp1到txtDp7,就会漏统计
  • 空值判断不全面:IsNull(ctrl.Value)只能检测Null值,用户手动清空的文本框会是空白字符串,这时候IsNull会返回False,导致误统计

下面是修正后的完整代码,我加了注释帮你理解:

Sub btnCal_Click()
    Dim filledCount As Integer
    Dim ctrl As Control
    
    filledCount = 0 '初始化已填充文本框的计数
    
    For Each ctrl In Me.Controls
        '先筛选出文本框控件
        If TypeOf ctrl Is TextBox Then
            '检查控件名称是否以"txtDp"开头
            If Left(ctrl.Name, 5) = "txtDp" Then
                '同时判断值不为Null且不是空白字符串
                If Not IsNull(ctrl.Value) And ctrl.Value <> "" Then
                    filledCount = filledCount + 1
                End If
            End If
        End If
    Next ctrl
    
    '用统计好的数量计算总金额并赋值
    txtEx.Value = filledCount * 10.5
End Sub

关键修正点说明:

  • 改用filledCount变量专门统计符合条件的已填充文本框数量,语义更清晰
  • 修正了名称匹配的长度:Left(ctrl.Name, 5)准确匹配txtDp开头的控件
  • 补充了空白字符串的判断,确保只有真正填充了内容的文本框才会被计数
  • 循环结束后使用统计好的数值计算,避免了引用失效的ctrl变量,彻底解决错误91

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:22:20