我的代码有什么问题?出现编译错误下一步没有:对于

我的代码有什么问题?出现编译错误下一步没有:对于

尝试根据单元格的值将颜色从一个工作表链接到另一个工作表。

Sub ColorMeAug()

Dim i As Long, r1 As Range, r2 As Range

   For i = 10 To 45

      Set r1 = Range("Aug!D" & i & ":Aug!M" & i)
      Set r2 = Range("Year!x" & i & ":Year!S" & i)
      If r1.Value = 1 Then
        r2.Interior.Color = vbWhite
      If r1.Value = 2 Then
        r2.Interior.Color = vbYellow
      If r1.Value = 3 Then
        r2.Interior.Color = vbRed
    End If
    
    Next i
End Sub

答案1

您的前 2 个“if”语句没有匹配的“end if”。
(在 VBA 中,End if 不是可选的。)

先解决这个问题,然后看看会发生什么。

答案2

如上所述,您的一些 if 语句缺少一些正确的闭包。

但是,在这种情况下,使用 If 或 Case 语句可能不是一种合适的编码解决方案。相反,您应该考虑使用基于词典的解决方案。考虑基于词典的解决方案的原因是,您的单元格值和您想要应用的颜色之间存在固定的 1:1 关系。

重写代码以使用字典(作为第一次尝试)

Option Explicit

Private InteriorColours As Scripting.Dictionary


Sub ColorMeAug()

    If InteriorColours Is Nothing Then SetupInteriorColours
     
    Dim i As Long
    For i = 10 To 45

        Dim r1 As Range
        Set r1 = Range("Aug!D" & i & ":Aug!M" & i)
    
        If InteriorColours.Exists(r1.Value) Then
          
            Range("Year!x" & i & ":Year!S" & i).Interior.Color = InteriorColours.Item(r1.Value)
          
        Else
          
            'raise error for no such colour
            
        End If
    
    Next i
    
End Sub


Public Sub SetupInteriorColours()

    Set InteriorColours = New Scripting.Dictionary
    
    With InteriorColours
    
        .Add 1, vbWhite
        .Add 2, vbYellow
        .Add 3, vbRed
        'etc
    
    End With
    
End Sub

相关内容