VBA代码编号格式

时间:2018-02-07 16:42:42

标签: excel vba excel-vba

Worksheet image

使用下面的代码我试图在某些名称出现在下拉列表(单元格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

1 个答案:

答案 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