我有以下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
答案 0 :(得分:0)
您应该避免使用上面提到的SELECT
和ACTIVATE
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