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
额外说明
- 我补充了
yearData的变量声明,避免VBA隐式类型转换带来的潜在问题;同时修正了year(StartDate)为Year(StartDate)(VBA中内置函数首字母大写是更规范的写法)。 - 当你传入
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
相关产品推荐
相关产品推荐

