2017-08-26 254 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