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

Excel VBA:如何将表格作为WorkDay函数的节假日列表?报错求解

解决WorkDay函数传入节假日数组报错的问题

问题根源

WorksheetFunction.WorkDay的holidays参数要求传入一维数组,但通过Range("A1:A10").Value获取的是二维数组(格式为holidaysArray(1 to 10, 1 to 1)),参数类型不匹配直接触发了"Unable to get the WorkDay property"错误。

三种修复方案

方案1:直接传入Range对象(最省心)

不需要转数组,直接把节假日所在的单元格范围作为参数传入:

Sub addWorkingdays()
    Dim holidaysRange As Range
    Set holidaysRange = Workbooks("Current.xlsm").Worksheets("Tools").Range("A1:A10")
    Dim endDate As Date
    daysRemaining = 10
    
    endDate = Application.WorksheetFunction.WorkDay(Now, daysRemaining, holidaysRange)
    workingSheet.Cells(N, 4) = CDate(endDate)
End Sub

方案2:把二维数组转成一维数组

如果必须用数组传递,手动将Range返回的二维数组转为一维:

Sub addWorkingdays()
    Dim holidaysArray As Variant
    Dim oneDimHolidays() As Date
    Dim i As Integer
    
    holidaysArray = Workbooks("Current.xlsm").Worksheets("Tools").Range("A1:A10").Value
    ' 初始化一维数组
    ReDim oneDimHolidays(1 To UBound(holidaysArray))
    ' 逐行提取数据转换维度
    For i = 1 To UBound(holidaysArray)
        oneDimHolidays(i) = holidaysArray(i, 1)
    Next i
    
    Dim endDate As Date
    daysRemaining = 10
    
    endDate = Application.WorksheetFunction.WorkDay(Now, daysRemaining, oneDimHolidays)
    workingSheet.Cells(N, 4) = CDate(endDate)
End Sub

方案3:用Application.WorkDay替代WorksheetFunction版本

这个版本不会直接抛出运行时错误,而是返回错误值,方便后续做异常处理:

Sub addWorkingdays()
    Dim holidaysArray As Variant
    holidaysArray = Workbooks("Current.xlsm").Worksheets("Tools").Range("A1:A10").Value
    Dim endDate As Variant ' 改为Variant类型接收可能的错误值
    daysRemaining = 10
    
    endDate = Application.WorkDay(Now, daysRemaining, holidaysArray)
    ' 判断计算是否成功
    If IsDate(endDate) Then
        workingSheet.Cells(N, 4) = CDate(endDate)
    Else
        MsgBox "工作日计算失败,请检查节假日数据格式"
    End If
End Sub

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 17:39:24