2017-08-26 160 views
0

我有以下2個代碼,第二個是試圖使用調用函數來調用第一個代碼。Excel VBA調用函數和循環

我有幾個分數範圍(「e42:e48」)。

但是,第二個代碼沒有經過分數列表,它每次只檢查每個分數,直到單擊下一個分數並運行代碼。

非常感謝您的幫助。謝謝。鑫

Sub IfElseIfTest_1() 
    Dim score As Integer 
    score = activecell.Value 

    If score >= 0 And score <= 35 Then 
     activecell(1, 2).Value = "F" 
     activecell(1, 2).HorizontalAlignment = xlCenter 
     activecell(1, 3).Value = "Terrible - needs attention" 

    ElseIf score >= 36 And score <= 50 Then 
     activecell(1, 2).Value = "D" 
     activecell(1, 2).HorizontalAlignment = xlCenter 
     activecell(1, 3).Value = "Needs attention" 

    ElseIf score >= 51 And score <= 65 Then 
     activecell(1, 2).Value = "C" 
     activecell(1, 2).HorizontalAlignment = xlCenter 
     activecell(1, 3).Value = "Not bad, could do better" 

    ElseIf score >= 66 And score <= 80 Then 
     activecell(1, 2).Value = "B" 
     activecell(1, 2).HorizontalAlignment = xlCenter 
     activecell(1, 3).Value = "Good score" 

    ElseIf score >= 81 And score <= 100 Then 
     activecell(1, 2).Value = "A" 
     activecell(1, 2).HorizontalAlignment = xlCenter 
     activecell(1, 3).Value = "Excellent score, well done!" 

    Else 
     MsgBox "Score not valid" 


    End If 


End Sub 






Sub IfElseIfTest_1_CallFunction() 

    Dim score As Range 

    ' need to Dim cell as RANGE, IF AS STRING WILL NOT WORK. 


    For Each score In Range("e42:e48") 

     Call IfElseIfTest_1 

    Next score 


End Sub 
+1

如果我正確理解你,你想爲每個單元從E42到E48執行'IfElseIfTest_1'。在這種情況下,你有幾個選項,但最簡單的一個可能是在你的第二個Sub – FernAndr

回答

0

您應該避免使用SELECTACTIVATE提到here。嘗試下面的代碼。

Sub IfElseIfTest_1(cel As Range) 
    Dim score As Integer 
    score = cel.Value 
    If score >= 0 And score <= 35 Then 
     cel.Offset(0, 1).Value = "F" 
     cel.Offset(0, 2).Value = "Terrible - needs attention" 
    ElseIf score >= 36 And score <= 50 Then 
     cel.Offset(0, 1).Value = "D" 
     cel.Offset(0, 2).Value = "Needs attention" 
    ElseIf score >= 51 And score <= 65 Then 
     cel.Offset(0, 1).Value = "C" 
     cel.Offset(0, 2).Value = "Not bad, could do better" 
    ElseIf score >= 66 And score <= 80 Then 
     cel.Offset(0, 1).Value = "B" 
     cel.Offset(0, 2).Value = "Good score" 
    ElseIf score >= 81 And score <= 100 Then 
     cel.Offset(0, 1).Value = "A" 
     cel.Offset(0, 2).Value = "Excellent score, well done!" 
    Else 
     MsgBox "Score not valid" 
    End If 
    cel.Offset(0, 1).HorizontalAlignment = xlCenter 
End Sub 

Sub IfElseIfTest_1_CallFunction() 
    Dim score As Range 
    Dim ws As Worksheet 
    Set ws = ThisWorkbook.Sheets("Sheet4") 'change Sheet4 to your data sheet 

    Application.ScreenUpdating = False   
    For Each score In ws.Range("e42:e48") 
     Call IfElseIfTest_1(score)   'call IfElseIfTest_1 by passing range score 
    Next score 
    Application.ScreenUpdating = True 
End Sub 
+0

的'Call IfElseIfTest_1'之前執行'score.Select',這是完美的。非常感謝。 –

+0

@xinpds - 不客氣! – Mrig