2016-09-19 53 views
-4

當宏退出For循環時,出現類型不匹配錯誤。我不知道爲什麼,但希望得到任何幫助。我曾嘗試尋找這個問題,但沒有任何建議適用於我的情況。退出循環的Excel宏類型不匹配錯誤

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線甚至我加入類型轉換功能「CLng函數」到1210,但似乎沒有任何幫助。在1420和1450行之間,我總是得到'類型不匹配'的錯誤,沒有詳細說明在哪裏以及爲什麼。

MODULE_NAME()數組是一個包含159個字符串條目的動態數組。任何幫助將不勝感激。

+0

'MacroLineNum'做什麼? – Comintern

+0

@ Mat'sMug它跳躍10,所以它是145 :) –

+0

@AA它似乎你不是退出'For'循環,在行1430之後(在Next Counter之前)添加一個'MsgBox'並且寫入'MsgBox 「計數器是:」&計數器「 –

回答

0

我能夠通過一些簡單的步驟完全解決這個問題。我不知道爲什麼,但這是有效的。我只是添加了CLng呼叫,因爲我無法讓它早點工作。

Option Explicit 
    Dim MODULE_NAME() As String 
    Dim Counter As Long 
    Dim i As Long 
    Dim k As Long 
1200       k = i + (UBound(MODULE_NAME) Mod 127) 
1210       For Counter = i To k 
1230        Call MacroLineNum(Counter, MODULE_NAME, TotalLines) 
1240        If Counter Mod UpdateFreq = 0 Then 
1250         '**Save the file 
1260         With gloMacroWorkbook 
1270          If Not .ReadOnly Then 
1280           .Save 
1290          Else 
1300           .Saved = False 
1310          End If 
1320         End With 
1330         LockWindowUpdate 0& 
1340         '------------------------------------------------------------------------------------------------- 
1350         ' Update the status bar. 
1360         '------------------------------------------------------------------------------------------------- 
1370         Call subStatusBarUpdater("Still updating the line numbers in the modules. " & Counter & " of " & UBound(MODULE_NAME) & " processed....") 
1380         If VBEHwnd Then 
1390          LockWindowUpdate VBEHwnd 
1400         End If 
1410        End If 
1420        If Counter = UBound(MODULE_NAME) Then 
1430         MsgBox "Exiting for loop." 
1440        End If 
1450       Next Counter 
1460       MsgBox "Saving file" 

感謝大家的幫助和快速回復。儘管我想深究這一點,但根據要求創建測試代碼已證明有點困難,因爲我有太多互相連接的函數調用等,我需要將它們提取出來並提供測試代碼。

+0

出於好奇,究竟是什麼激勵了1980年代VBA代碼中的行號? –

+0

出於好奇,在VBA代碼中具有1980年代行數的正確答案是什麼? – ThunderFrame

+2

FWIW如果使用線路號碼,例如'在錯誤轉到1590'上,然後重新編號會引入令人討厭的難以發現的錯誤。除了移植舊的傳統QBASIC代碼之外,VBA不需要行號;它們在新代碼中是有害的,只是爲了可讀性。 –