VBA直接写入日期换算值到Sheet2及Sum函数未定义报错咨询
VBA日期数值写入及Sum报错解决方案
1. Sum函数报错修复
报错有两个核心原因:
- VBA原生没有内置
Sum函数,调用Excel工作表的Sum函数必须加上WorksheetFunction前缀 - 你使用
Range(intRow, intCol)定位单元格的写法错误:Range对象需要传入"A1"这类地址字符串,按行、列序号定位要改用Cells(intRow, intCol)
另外你只是读取单个单元格Sheet1!T2的数值,完全不需要调用Sum,冗余调用反而增加不必要的开销,修正后的代码有两种可选:
- 保留Sum的写法:
ThisWorkbook.Sheets("Sheet2").Cells(intRow, intCol) = WorksheetFunction.Sum(ThisWorkbook.Sheets("Sheet1").Range("T2"))
- 去掉冗余Sum的高效写法:
ThisWorkbook.Sheets("Sheet2").Cells(intRow, intCol) = ThisWorkbook.Sheets("Sheet1").Range("T2").Value
2. 直接写入计算结果到Sheet2的实现方案
完全不需要经过Sheet1中转,直接把计算得到的日期数值赋值给Sheet2目标单元格即可,完整示例代码:
' 提前转换文本框数值格式,避免类型不匹配报错 Dim yearVal As Long, monthVal As Long, dayVal As Long, dateNum As Long yearVal = CLng(txtYear.Value) monthVal = CLng(txtMonth.Value) dayVal = CLng(txtDay.Value) ' 计算日期对应数值 dateNum = yearVal * 365 + monthVal * 30 + dayVal ' 直接写入Sheet2目标单元格 ThisWorkbook.Sheets("Sheet2").Cells(intRow, intCol).Value = dateNum
后续需要把Sheet2的运算结果返回Sheet1时,直接用相同的赋值逻辑即可,示例:
' 把Sheet2的A1单元格计算结果写入Sheet1的C3单元格 ThisWorkbook.Sheets("Sheet1").Range("C3").Value = ThisWorkbook.Sheets("Sheet2").Range("A1").Value
内容的提问来源于stack exchange,提问作者User123
相关产品推荐
相关产品推荐

