You need to enable JavaScript to run this app. Office2016中VBA循环调用Networkdays函数报错如何解决
优惠活动
大模型
产品
解决方案
定价
更多

Office2016中VBA循环调用Networkdays函数报错如何解决

问题原因及修复方案

原代码存在的问题

  • 循环语法错误:For 循环定义的迭代变量为i,但终止语句写为Next N,直接触发编译报错
  • 工作表未绑定:所有单元格调用未明确指定Dump工作表,当活动工作表不是目标表时,取值逻辑完全错位
  • 属性赋值错误:直接把函数计算结果赋值给单元格的Formula属性,逻辑不匹配,应该赋值给Value属性
  • 无错误兼容逻辑:如果待计算的起始日期列(C列)为空、不是合法日期格式,WorksheetFunction.NetworkDays会直接抛出运行时错误

修正后可运行代码

Sub 计算工作日天数()
    Dim N As Long
    Dim i As Long
    Dim wf As WorksheetFunction
    Dim sht As Worksheet
    
    Set wf = Application.WorksheetFunction
    ' 明确绑定目标工作表,避免活动表错位问题
    Set sht = Sheets("Dump")
    
    With sht
        N = .Range("A" & .Rows.Count).End(xlUp).Row
        ' 写入当日日期到E1作为最晚计算日期
        .Range("E1") = Date
        
        For i = 2 To N
            ' 先判断C列是否为合法日期,避免运行时错误
            If IsDate(.Cells(i, 3).Value) Then
                .Cells(i, 4).Value = wf.NetworkDays(.Cells(i, 3).Value, .Cells(1, 5).Value)
            Else
                ' 非法日期时D列填写提示,可按需修改为留空
                .Cells(i, 4).Value = "无效起始日期"
            End If
        Next i
    End With
End Sub

更高效率的优化方案

如果不需要VBA逐行计算,也可以直接给D列批量写入公式,运行速度更快:

Sub 批量公式计算工作日()
    Dim N As Long
    Dim sht As Worksheet
    Set sht = Sheets("Dump")
    
    With sht
        N = .Range("A" & .Rows.Count).End(xlUp).Row
        .Range("E1") = Date
        ' 直接写入公式,绝对引用E1,批量填充
        .Range("D2:D" & N).Formula = "=NETWORKDAYS(C2,$E$1)"
    End With
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 20:06:05