为什么不能在Excel VBA中的case语句中访问变量

为什么不能在Excel VBA中的case语句中访问变量,excel,vba,Excel,Vba,我有一个Excel VBA函数,它根据a列中的分数给出B列中学生的分数。我尝试了下一个,它工作得很好,但当我尝试做,而它显示错误。问题在哪里 Private Sub Button2_Click() Dim mark As Single Dim grade As String Dim counter As Integer counter = 1 Do While counter < 10 counter = counter + 1

我有一个Excel VBA函数,它根据a列中的分数给出B列中学生的分数。我尝试了下一个,它工作得很好,但当我尝试做,而它显示错误。问题在哪里

Private Sub Button2_Click()
    Dim mark As Single
    Dim grade As String
    Dim counter As Integer
    counter = 1
    Do While counter < 10
        counter = counter + 1
        mark = Cells(counter, 1).Value
        'To set the alignment to center
        Range("A1:B10").Select
            With Selection
            .HorizontalAlignment = xlCenter
            End With
        Select Case mark
            Case 0 To 20
            grade = "F"
            Cells(counter, 2) = grade
            Case 20 To 29
            grade = "E"
            Cells(counter, 2) = grade
            Case 30 To 39
            grade = "D"
            Cells(counter, 2) = grade
            Case 40 To 59
            grade = "C"
            Cells(counter, 2) = grade
            Case 60 To 79
            grade = "B"
            Cells(counter, 2) = grade
            Case 80 To 100
            grade = "A"
            Cells(counter, 2) = grade
            Case Else
            grade = "Error!"
            Cells(counter, 2) = grade
        End Select
    Loop
End Sub
Private子按钮2\u单击()
暗标为单色
将等级设置为字符串
作为整数的Dim计数器
计数器=1
当计数器<10时执行此操作
计数器=计数器+1
标记=单元格(计数器,1)。值
'将路线设置为中心
范围(“A1:B10”)。选择
有选择
.HorizontalAlignment=xlCenter
以
选择大小写标记
案例0至20
grade=“F”
单元(计数器,2)=等级
案例20至29
grade=“E”
单元(计数器,2)=等级
案例30至39
grade=“D”
单元(计数器,2)=等级
案例40至59
grade=“C”
单元(计数器,2)=等级
案例60至79
等级=“B”
单元(计数器,2)=等级
案例80至100
等级=“A”
单元(计数器,2)=等级
其他情况
grade=“错误!”
单元(计数器,2)=等级
结束选择
环
端接头

可以在excel工作表A列的前10行中取0到100之间的任何值。当您运行宏时,B单元将充满渐变。

请尝试下面的操作。在将等级写入行单元格之前,当计数器增加时,代码将等级写入下一行。我在选择case之后移动了语句
counter=counter+1
,现在所有的行都得到了相应的等级

Private Sub Button2_Click()
    Dim mark As Single
    Dim grade As String
    Dim counter As Integer
    counter = 1
    Do While counter < 10            
        mark = Cells(counter, 1).Value
        'To set the alignment to center
        Range("A1:B10").Select
            With Selection
            .HorizontalAlignment = xlCenter
            End With
        Select Case mark
            Case 0 To 20
            grade = "F"
            Cells(counter, 2) = grade
            Case 20 To 29
            grade = "E"
            Cells(counter, 2) = grade
            Case 30 To 39
            grade = "D"
            Cells(counter, 2) = grade
            Case 40 To 59
            grade = "C"
            Cells(counter, 2) = grade
            Case 60 To 79
            grade = "B"
            Cells(counter, 2) = grade
            Case 80 To 100
            grade = "A"
            Cells(counter, 2) = grade
            Case Else
            grade = "Error!"
            Cells(counter, 2) = grade
        End Select
        counter = counter + 1
    Loop
End Sub
Private子按钮2\u单击()
暗标为单色
将等级设置为字符串
作为整数的Dim计数器
计数器=1
当计数器<10时执行此操作
标记=单元格(计数器,1)。值
'将路线设置为中心
范围(“A1:B10”)。选择
有选择
.HorizontalAlignment=xlCenter
以
选择大小写标记
案例0至20
grade=“F”
单元(计数器,2)=等级
案例20至29
grade=“E”
单元(计数器,2)=等级
案例30至39
grade=“D”
单元(计数器,2)=等级
案例40至59
grade=“C”
单元(计数器,2)=等级
案例60至79
等级=“B”
单元(计数器,2)=等级
案例80至100
等级=“A”
单元(计数器,2)=等级
其他情况
grade=“错误!”
单元(计数器,2)=等级
结束选择
计数器=计数器+1
环
端接头
你的代码对我有用。 由于您希望在前10行中倾斜,因此必须在开始时将计数器设置为0,或者根本不设置计数器 此外,您还可以将其缩短:

Private Sub Button2_Click()
    Dim mark As Single
    Dim grade As String
    Dim counter As Integer

    Range("A1:B10").HorizontalAlignment = xlCenter
    Do While counter < 10
        counter = counter + 1
        mark = Cells(counter, 1).Value
        'To set the alignment to center
        Select Case mark
            Case 0 To 19
                grade = "F"
            Case 20 To 29
                grade = "E"
            Case 30 To 39
                grade = "D"
            Case 40 To 59
                grade = "C"
            Case 60 To 79
                grade = "B"
            Case 80 To 100
                grade = "A"
            Case Else
                grade = "Error!"
        End Select
        Cells(counter, 2) = grade
    Loop
End Sub
Private子按钮2\u单击()
暗标为单色
将等级设置为字符串
作为整数的Dim计数器
范围(“A1:B10”)。水平对齐=xlCenter
当计数器<10时执行此操作
计数器=计数器+1
标记=单元格(计数器,1)。值
'将路线设置为中心
选择大小写标记
案例0至19
grade=“F”
案例20至29
grade=“E”
案例30至39
grade=“D”
案例40至59
grade=“C”
案例60至79
等级=“B”
案例80至100
等级=“A”
其他情况
grade=“错误!”
结束选择
单元(计数器,2)=等级
环
端接头

如您所见,我还1)将
水平对齐设置移到循环之外,因为它不需要在每次迭代时设置!2) 已将
案例0至20
更正为
案例0至19
否,以便与后续
案例20至29重叠
,感谢此操作有效。而且我有很多不必要的单元格重复(计数器,2)=等级。你发布的代码对我来说很好。错误是什么?它在哪一行?首先我在这一行中得到错误
mark=Cells(计数器,1)。Value
,然后当我将其更改为
mark=Cells(1,1)。Value
时,它在第三个case语句中显示
Cells(计数器,2)=grade
中的错误,因为标记enetred是35。当我用一个值替换计数器时,它工作得很好。你得到的具体错误是什么?我只记得错误号为1041,因为它在我的办公室电脑中。你是对的,当我在家用电脑中尝试我自己的代码时,它工作得很好。而不是我的办公室电脑出了什么问题。我只使用了Option Explicit,其他什么都没有。