2015-03-31 61 views
-1

我想解決下面的測試問題。如果單元格中存在錯誤(即= 1/0),則在此之後將不會運行其他測試。我想知道如何在測試主要任務部分解決這個問題。測試主要任務

Private Sub ts_NoBlank(TsCn, STST, LsSt, LsIn, TsRw, MsCo, MsIC, MsSt) 
    Dim TsCl, StRw, LsRw, TsSh 

    TsCl = ColNrOfField(TsCn) 
    StRw = FsRwOfField(TsCn) + 1 
    LsRw = LsRwOfField(TsCn) 
    TsSh = SheetOfField(TsCn) 

' Setting up Status Updates 
    PLcSt = -1 'Starting previous local status is set to -100% to show eitherways 
    rws = LsRw - StRw 
    'this part has to be copied to whenever showing the status (Value of LcSt has to be added each time by function) 
    LcSt = 0 
    If LcSt - PLcSt >= LsIn Then 
     Call ShowStatus(MsSt & " (" & Application.WorksheetFunction.Text(LcSt, "0%") & ")", ThisWorkbook.Worksheets("Calculations Running").Range("Started"), STST + (LsSt - STST) * LcSt) 
     PLcSt = LcSt 
    End If 

' Testing primary task 
    ErrNr = 0 
    For Rw = StRw To LsRw 'ToDo speed up with fromrow torow 
     If Len(ThisWorkbook.Sheets(TsSh).Cells(Rw, TsCl)) = 0 Then 
      ThisWorkbook.Sheets(TsSh).Cells(Rw, TsCl).Interior.ColorIndex = 46 
      ErrNr = ErrNr + 1 
     End If 

     'Showing Local Status 
     LcSt = 0.1 + ((Rw/LsRw) * 0.75) 
     If LcSt - PLcSt >= LsIn Then 
      Call ShowStatus(MsSt & " (" & Application.WorksheetFunction.Text(LcSt, "0%") & ")", ThisWorkbook.Worksheets("Calculations Running").Range("Started"), STST + (LsSt - STST) * LcSt) 
      PLcSt = LcSt 
     End If 

    Next Rw 
' Updating Test Results on 'Testing' Page 

    TRRg = "test" & TsRw & "_results" 
    If ErrNr = 0 Then 'If Results are Positive 
     ThisWorkbook.Worksheets("Testing").Range(TRRg) = MsCo 
     ThisWorkbook.Worksheets("Testing").Range(TRRg).Interior.ColorIndex = 51 
    Else 'If Errors are found 
     ErrMS = NumberizeMessage(MsIC, "SP_textvers", "S_textvers", "P_textvers", ErrNr) 
     ThisWorkbook.Worksheets("Testing").Range(TRRg) = ErrMS 
     ThisWorkbook.Worksheets("Testing").Range(TRRg).Interior.ColorIndex = 3 
    End If 

    'Showing Local Status 
    LcSt = 0.1 
    If LcSt - PLcSt >= LsIn Then 
     Call ShowStatus(MsSt & " (" & Application.WorksheetFunction.Text(LcSt, "0%") & ")", ThisWorkbook.Worksheets("Calculations Running").Range("Started"), STST + (LsSt - STST) * LcSt) 
     PLcSt = LcSt 
    End If 

    ' Highlighting erroneous cells (if not done during testing) 
    If ErrNr > 0 Then 

    End If 
'Showing Local Status 100% 
    LcSt = 1 
    If LcSt - PLcSt >= LsIn Then 
     Call ShowStatus(MsSt & " (" & Application.WorksheetFunction.Text(LcSt, "0%") & ")", ThisWorkbook.Worksheets("Calculations Running").Range("Started"), STST + (LsSt - STST) * LcSt) 
     PLcSt = LcSt 
    End If 

End Sub 
+0

不確定你究竟在做什麼。你的代碼失敗了嗎?如果是這樣的話?您的代碼是否需要額外執行一項任務,但您不知道如何執行該任務?你可能會發現在你的'Sub'參數上聲明類型是很有價值的,至少它會幫助我們更多地瞭解你的代碼。 – FreeMan 2015-03-31 12:46:50

+0

我在代碼: '測試初級任務 ErrNr = 0 對於RW = STRW要LSRW' TODO加快與fromrow torow 如果len(ThisWorkbook.Sheets(TsSh).Cells(RW,的TsCl))= 0。然後 ThisWorkbook.Sheets(TsSh).Cells(Rw,TsCl).Interior.ColorIndex = 46 ErrNr = ErrNr + 1 End If 這裏它的作用是爲單元格着色,如果有一個公式不被接受,但是之後的其餘測試不會運行。我想解決這個問題,所以如果有一個公式錯誤的單元格,我只想標記它,然後繼續下一個過程。 – 2015-03-31 12:58:58

+1

請在問題本身中提出問題澄清,而不是在評論中。您的問題可以通過點擊「編輯」鏈接進行編輯。 – 2015-03-31 13:05:33

回答

0

既然你表明' Testing primary task部分似乎工作,但沒有什麼後,似乎執行,我建議,當你來到這裏:

'Showing Local Status 
LcSt = 0.1 
If LcSt - PLcSt >= LsIn Then 

這個條件是假的,所以代碼從未執行。

然後你在這裏:

' Highlighting erroneous cells (if not done during testing) 
If ErrNr > 0 Then 

End If 

並沒有代碼來執行,也不管ErrNr值。

然後你在這裏:

'Showing Local Status 100% 
LcSt = 1 
If LcSt - PLcSt >= LsIn Then 

而且它仍在評估False,如此反覆它永遠不會執行。

您是否已經在調試器中查看了值並確保一切都如您所期望的那樣?