Excel VBA调用函数和循环

时间:2017-08-26 11:20:07

标签: excel-vba vba excel

我有以下2个代码,第二个是尝试使用call函数来调用第一个代码。

我在范围内有几个分数(" 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 个答案:

答案 0 :(得分: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