【发布时间】:2017-01-27 10:51:08
【问题描述】:
宏退出 For 循环时出现类型不匹配错误。我不知道为什么,但如果我能得到任何帮助,我将不胜感激。我确实尝试搜索此问题,但没有任何建议适用于我的案例。
Option Explicit
Dim MODULE_NAME() As String
Dim Counter As Long
Dim i As Long
1210 For Counter = i To CLng(i + CLng(CLng(UBound(MODULE_NAME)) Mod 127))
1220 Call MacroLineNum(Counter, MODULE_NAME, TotalLines)
1230 If Counter Mod UpdateFreq = 0 Then
1240 '**Save the file
1250 With gloMacroWorkbook
1260 If Not .ReadOnly Then
1270 .Save
1280 Else
1290 .Saved = False
1300 End If
1310 End With
1320 LockWindowUpdate 0&
1330 '-------------------------------------------------------------------------------------------------
1340 ' Update the status bar.
1350 '-------------------------------------------------------------------------------------------------
1360 Call subStatusBarUpdater("Still updating the line numbers in the modules. " & Counter & " of " & UBound(MODULE_NAME) & " processed....")
1370 If VBEHwnd Then
1380 LockWindowUpdate VBEHwnd
1390 End If
1400 End If
1410 If Counter = UBound(MODULE_NAME) Then
1420 MsgBox "Exiting for loop."
1430 End If
1440 Next Counter
1450 MsgBox "Saving file"
我的代码到达第 1420 行,但没有到达第 1450 行。我什至在 1210 中添加了类型转换函数“CLng”,但似乎没有任何帮助。在第 1420 行和第 1450 行之间,我总是收到“类型不匹配”错误,没有详细说明位置和原因。
MODULE_NAME() 数组是一个包含 159 个字符串条目的动态数组。任何帮助将不胜感激。
【问题讨论】:
-
MacroLineNum是做什么的? -
@Mat'sMug 它是 10 跳,所以它是 145 :)
-
@A A 看来你没有退出
For循环,在第1430 行之后(Next Counter之前)添加一个MsgBox并写MsgBox "Counter is : " & Counter -
i是否在进入循环之前分配了任何内容?如果为 0,则 for 循环为For Counter = 0 To 31,这使得条件If Counter = UBound(MODULE_NAME)不太可能是True。你能把你的代码去掉一点意大利面,并尝试用minimal reproducible example重现同样的问题吗? -
@Mat's Mug 感谢您的收获。我忘了在我的问题中提到“我”的价值。在此示例中,“i”设置为 128。我会尝试看看我是否可以发布一个完整的代码集,该代码集实际上会产生问题,但“最小、完整和可验证”。