使用下面的代码我试图在某些名称出现在下拉列表(单元格C4)中时格式化单元格,并在范围G9:N9中格式化这些特定单元格。但是当我运行代码时,它会将所有数字转换为百分比,以区分两种格式样式(百分比和常规)。有人可以帮忙吗?
Sub LetsMakeThisWork()
With Worksheets("Geo")
If C4 = V2 Or C4 = x2 Or C4 = AB2 Or C4 = AD2 Or C4 = AG2 Or C4 = AM2 Or C4 = AO2 Or C4 = AQ2 Or C4 = AU2 Or C4 = AW2 Then
ActiveCell.Range("G9:N9").NumberFormat = "0.0%"
Else
ActiveCell.Range("G9:N9").NumberFormat = "General"
End If
End With
End Sub
答案 0 :(得分:1)
在上下文中,您希望C4, V2
等是单元格引用,但VBA将它们解释为变量。在这种情况下,您的代码完全运行这一事实意味着您没有使用Option Explicit
,您应该在VBA中使用它。似乎正在发生的事情是,您在测试它们的相等性过程中隐式创建空变量。任何两个空变量都是相等的,因此If
语句的第一个子句总是运行。已经更正但未经过测试的代码(我认为)应该是这样的:
Option Explicit
Sub LetsMakeThisWork()
Dim C4 As Range
With Worksheets("Geo")
Set C4 = .Range("C4")
If C4.Value = .Range("RV2").Value Or C4.Value = .Range("X2").Value Or _
C4.Value = .Range("AB2").Value Or C4.Value = .Range("AD2").Value Or _
C4.Value = .Range("AG2").Value Or C4.Value = .Range("AM2").Value Or _
C4.Value = .Range("AO2").Value Or C4.Value = .Range("AQ2").Value Or _
C4.Value = .Range("AU2").Value Or C4.Value = .Range("AW2").Value Then
.Range("G9:N9").NumberFormat = "0.0%"
Else
.Range("G9:N9").NumberFormat = "General"
End If
End With
End Sub