为什么在Excel VBA中的case语句中不访问variables

我有一个Excel VBA函数,它根据A列中的标记给出B列中学生的评分。 我尝试使用FOR NEXT,它工作正常,但是当我尝试了DO虽然它显示错误。 问题在哪里?

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 

你可以在Excel表格的前10列中取0到100之间的任何值。 当你运行macros时,B单元格被填充。

你的代码适合我。 既然你想要通过前10行,你必须在开始时设置counter = 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 

尝试下面。 当等级写入行单元之前,随着计数器增加,下一行写入等级。 select 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