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

VBA代码DATE()类型不匹配求助:stringaAppoggio = myVar赋值报错

解决VBA中Evaluate调用的类型不匹配问题

这个类型不匹配的问题根源很明确:你在Application.Evaluate的字符串表达式里直接引用了VBA变量yearData,但Excel的公式计算环境根本不认识这个VBA层面的变量——它会把yearData当成一个不存在的单元格名称或公式名称,导致生成的DATE函数返回错误值,最终在给stringaAppoggio赋值时触发类型不匹配。

修正方案

你需要把VBA变量yearData的实际值拼接进Evaluate的字符串表达式中,而不是直接写变量名。修改后的关键代码如下:

arr4 = Application.Transpose(.Evaluate("TEXT(DATE(" & yearData & ",ROW(" & StrtD & ":" & EndD & "),1), ""[$-0410]mmmm yyyy"")"))

完整修正后的代码

Dim StrtD As Long, EndD As Long
Dim StartDate As Date, EndDate As Date
Dim myVar As Variant
Dim stringaAppoggio As String
Dim yearData As Integer ' 补充变量声明,避免隐式类型转换问题

With ThisWorkbook.Sheets("Settimana")
    StartDate = .TextBox1.Value
    EndDate = .TextBox2.Value
    
    StrtD = Month(StartDate)
    EndD = StrtD + DateDiff("m", StartDate, EndDate)
    yearData = Year(StartDate) ' 修正函数名大小写,VBA内置函数首字母大写更规范
    
    ' 修正Evaluate中的变量拼接逻辑
    arr4 = Application.Transpose(.Evaluate("TEXT(DATE(" & yearData & ",ROW(" & StrtD & ":" & EndD & "),1), ""[$-0410]mmmm yyyy"")"))
    
    For Each myVar In arr4
        stringaAppoggio = myVar
        ' 这里可以添加你的后续处理逻辑,比如打印到立即窗口
        Debug.Print stringaAppoggio
    Next myVar
End With

额外说明

  1. 我补充了yearData的变量声明,避免VBA隐式类型转换带来的潜在问题;同时修正了year(StartDate)为Year(StartDate)(VBA中内置函数首字母大写是更规范的写法)。
  2. 当你传入StartDate=01/01/2020、EndDate=01/10/2020时,StrtD=1,EndD=1+9=10,Evaluate会执行TEXT(DATE(2020,ROW(1:10),1),"[$-0410]mmmm yyyy"),生成从2020年1月到10月的意大利语月份+年份文本,每个元素都是合法的字符串,赋值时就不会再触发类型不匹配了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.14 09:13:14