尝试根据单元格的值将颜色从一个工作表链接到另一个工作表。
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