运行Excel VBA代码报Sub or Function not defined编译错误求助
VBA时间格式提取代码报错修复
编译错误触发原因
- 拼写错误:Else分支中出现的
timeArrary为笔误,正确写法为timeArray,VBA无法识别错误拼写的变量,触发未定义报错 - 循环变量不匹配:For循环使用
i作为遍历变量,结束语句错误写为Next cell,变量对应关系错误触发编译报错 - 单元格引用逻辑错误:已定义时间列变量
rTimeCol = "d",引用时额外加了引号写为Range("rTimeCol" & i),导致VBA尝试调用名为rTimeCol的自定义过程而非引用D列单元格,也会触发未定义报错 - 额外逻辑问题:仅小时存在的分支中
Split按"h"拆分后,小时值存储在数组索引0的位置,原有代码取索引1会返回空值;分支中的Exit For会导致遍历到第一行符合条件的内容后直接终止循环,不会处理后续行,如不需要该逻辑可删除。
修正后完整代码
Sub timeFormat2() Dim timeArray() As Variant Dim hour As String Dim min As String Dim tempMin As String Dim rTimeCol As String Dim i As Integer rTimeCol = "d" For i = 2 To 5 '仅存在小时 If ((InStr(Range(rTimeCol & i).Value, "h") > 0) And (InStr(Range(rTimeCol & i).Value, "m") = 0)) Then timeArray = Split(Range(rTimeCol & i).Value, "h") hour = timeArray(0) min = "0" Range("v" & i).Value = Trim(hour) Range("w" & i).Value = min ' 如需要处理所有行请删除下一行的Exit For Exit For '仅存在分钟 ElseIf ((InStr(Range(rTimeCol & i).Value, "h") = 0) And (InStr(Range(rTimeCol & i).Value, "m") > 0)) Then tempMin = Range(rTimeCol & i).Value hour = "0" min = Right(tempMin, Len(tempMin) - 1) Range("v" & i).Value = hour Range("w" & i).Value = Trim(min) '同时存在小时和分钟 Else timeArray = Split(Range(rTimeCol & i).Value, "h") hour = timeArray(0) timeArray = Split(timeArray(1), "m") min = Trim(timeArray(0)) Range("v" & i).Value = Trim(hour) Range("w" & i).Value = min End If Next i End Sub
内容的提问来源于stack exchange,提问作者Anna Rankin
相关产品推荐
相关产品推荐

