尝试运行宏以根据条件突出显示单元格时出现错误1004

时间:2014-02-04 22:56:16

标签: excel vba excel-vba

我有一个电子表格,其中包含第1行中的所有列标题。单元格B2包含日期。然后我在(K2到AH2)之后有25个月的列,行K1到AH1中的列标题是月份,从当前月份开始。我试图突出显示从K2到AH2的所有单元格,只要它们的列标题日期小于B2中的值。

例如,B2是6月13日至14日。 K1是今天月份的公式。所以公式是Today(),格式为MMM-YY(FEB-14)。

我认为这很简单,因为我只是比较2个日期并突出显示不同的单元格,如果一个小于另一个。我猜我因为没有将B2日期转换为月份格式而收到错误?这是我收到的错误。

Run-time error '1004': Application-defined or object-defined error.

这是我的代码:

Sub Highlight()


Dim firstColumn As Integer
Dim lastColumn As Integer
Dim firstRow As Integer
Dim lastRow As Integer
Dim rowCounter As Integer
Dim columnCounter As Integer


firstColumn = 9
firstRow = 2
lastColumn = 32
lastRow = 6
columnCounter = firstColumn

Do Until columnCounter = lastColumn
    If Cells(K, 1).Value < Cells(B, 2).Value Then
    Cells(columnCounter, lastRow).Interior.Color = vbYellow
    End If

    columnCounter = columnCounter + 1
Loop

End Sub

1 个答案:

答案 0 :(得分:2)

由于这行代码

,您很可能会发生错误
If Cells(K, 1).Value < Cells(B, 2).Value Then

如果您正在使用单元格,则需要指定数字行和col(按此顺序),即单元格(1,2)指的是第1行第2列或B1。什么是K和B?它们是变量,因为它们未在您提供的代码中声明或初始化。因此,它试图在第0行找到不存在的单元格。

如果要指定单元格的字母数字位置,请使用Range("K1")Cells(1, "K")时请记住该行首先

此外,您的代码还存在其他一些问题,而这些问题无法完成您希望它执行的操作。

  1. If Cells(K,1).Value&lt;单元格(B,2).Value Then

  2. 即使您修复了单元格引用K1和B2,循环的每次迭代都会比较K1和B2。

    1.  单元格(columnCounter,lastRow).Interior.Color = vbYellow
    2. 此处的参数必须先是行然后是列。此外,变量lastRow永远不会更改,您已将其分配给6,并且对于循环的每次迭代它将为6

      至少你正在做什么,你需要2个嵌套循环来遍历行和列!我已经为您编写了一些示例代码来指导您。如果您需要更多帮助,请告诉我

      Sub Highlight()
      
      Dim firstColumn As Integer
      Dim lastColumn As Integer
      Dim firstRow As Integer
      Dim lastRow As Integer
      Dim rowCounter As Integer
      Dim columnCounter As Integer
      
      firstColumn = 9
      firstRow = 2
      lastColumn = 32
      lastRow = 6
      
      For columnCounter = firstColumn To lastColumn
          For rowCounter = firstRow To lastRow
              If Cells(1, columnCounter) < Cells(rowCounter, "B") Then
                  Cells(rowCounter, columnCounter).Interior.Color = vbYellow
              End If
          Next rowCounter
      Next columnCounter
      
      End Sub