【问题标题】:VBA Cell Format ErrorVBA 单元格格式错误
【发布时间】:2015-03-27 20:40:35
【问题描述】:

我正在尝试使用 for 循环(稍后是条件 while 循环)格式化一组单元格

我收到错误“1004”

对象“全局”的方法“范围”失败

我不知道如何将单元格值转换为不会引发此错误的范围值。 Cells(x,y) 本身也会引发错误

提前致谢

    For row = 2 To 5

    With Range(Cells(row, 5)).Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
    End With
    With Range(Cells(row, 5)).Interior.Gradient.ColorStops.Add(0)
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
    End With
    With Range(Cells(row, 5)).Interior.Gradient.ColorStops.Add(1)
        .ThemeColor = xlThemeColorAccent6
        .TintAndShade = -0.250984221930601
    End With

Next row

【问题讨论】:

  • Range(Cells(row,5).AddressLocal)
  • 不要使用row 作为变量名。 .RowPropertyRange object。使用Dim rw as long,这样a) 不会造成混淆,b) 您可以省去一次按键操作。

标签: excel vba


【解决方案1】:

你为什么还要循环播放?

Sub SO()

    With Range(Cells(2, 5), Cells(5, 5)).Interior
        .Pattern = xlPatternRectangularGradient
        .Gradient.RectangleLeft = 0.5
        .Gradient.RectangleRight = 0.5
        .Gradient.RectangleTop = 0.5
        .Gradient.RectangleBottom = 0.5
        .Gradient.ColorStops.Clear
        With .Gradient.ColorStops.Add(0)
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        With .Gradient.ColorStops.Add(1)
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = -0.250984221930601
        End With
    End With

End Sub

【讨论】:

    【解决方案2】:

    不需要Range()

    只要Cells(row, 5).Interior

      For row = 2 To 5
    
        With Cells(row, 5).Interior
            .Pattern = xlPatternRectangularGradient
            .Gradient.RectangleLeft = 0.5
            .Gradient.RectangleRight = 0.5
            .Gradient.RectangleTop = 0.5
            .Gradient.RectangleBottom = 0.5
            .Gradient.ColorStops.Clear
        End With
        With Cells(row, 5).Interior.Gradient.ColorStops.Add(0)
            .ThemeColor = xlThemeColorDark1
            .TintAndShade = 0
        End With
        With Cells(row, 5).Interior.Gradient.ColorStops.Add(1)
            .ThemeColor = xlThemeColorAccent6
            .TintAndShade = -0.250984221930601
        End With
    
    Next row
    

    【讨论】:

    • 纠正 OP 将范围的 Row property 不正确声明为变量名是否谨慎?
    • 我的观点是,使用保留字作为变量名是不合适的。如果在同一个子中的某个地方调用了Range("A" & rows.count).End(xlUp).Row.Row 将更改为.row,很可能会抛出错误,而不是提供范围的.Row 属性;肯定不可能传回正确的数字。
    • 没有错误....Sub test() Cells(10, 1).Select For row = 1 To 5 rw = ActiveCell.row MsgBox row & "<>" & rw Next row End Sub
    • 你的例子是正确的。我猜范围父级解决了歧义。我会坚持不使用保留字作为变量名的规范做法,如果我再多尝试一下并提出一个“为什么不”而不是简单的“坏形式”的 MCVE,我会报告回来。
    【解决方案3】:

    摆脱 Range()

    With Cells(row, 5).Interior
    

    你想使用

    Cells(row, col) 
    Cells(2, 5)
    

    Range(addressString)
    Range("E2")
    

    如果您没有在其中任何一个前面放置工作表对象,如果您在工作表模块中工作,它们将引用 Activesheet 或“我”。

    供参考:

    Dim ws as worksheet
    set ws = Thisworkbook.sheets("Sheet1")
    
    ws.cells(2, 5)
    ws.Range("E2")
    

    【讨论】:

      猜你喜欢
      • 2012-01-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-06
      • 2016-10-20
      • 1970-01-01
      • 1970-01-01
      • 2022-11-24
      相关资源
      最近更新 更多