2015-07-20 173 views
0

我以编程方式创建Excel工作簿,并将宏关联到按钮,此宏应检查用户在工作表中输入的值是否正确并为根据情况绿色或红色的细胞。运行时错误1004“Interior.Color”

宏的代码是在另一个Excel工作簿,并加入到与此代码创建的工作簿:

With newWorkBook.Worksheets(1).Buttons.Add(350, 115, 50, 41.25) 
    .Caption = "Vérifier la conformité" 
    .OnAction = "'" & ThisWorkbook.FullName & "'!check_FCM" 
End With 

下面是宏的代码部分不工作:

For i = 0 To col - 1 
    If (IsNumeric(Cells(29, i + 2).Value)) Then 
     If (Cells(29, i + 2).Value >= Cells(31, i + 2).Value And Cells(29, i + 2).Value <= Cells(32, i + 2)) Then 
      Range(Cells(29, i + 2).Address()).Interior.Color = RGB(0, 255, 0) 
     Else 
      Range(Cells(29, i + 2).Address()).Interior.Color = RGB(255, 0, 0) 
      isCorrect = False ' 
     End If ' 
    End If ' 
Next i ' 

的问题似乎来自使用“Interior.Color=RGB(x,y,z)”,因为当我删除它时,我没有收到错误。

+1

工作表是否受到保护?顺便说一句,可以使用:'将细胞(29,I + 2)= .Interior.Color RGB(0,255,0)'而不是'范围(将细胞(29,I + 2)。地址())内部。颜色为RGB(0,255,0)' – Rory

+0

是,纸张被保护的,当我删除保护它工作正常,但我需要保持保护工作表,我该如何使宏观调控工作? – otus

+0

您需要在应用新颜色之前关闭保护并将其打开。或者您可以更改保护级别以允许更改单元格颜色。 – mielk

回答

1

可以撤消保护表如下:

Sheets("sheetname").Unprotect 

For i = 0 To col - 1 

    If (IsNumeric(Cells(29, i + 2).Value)) Then 

     If (Cells(29, i + 2).Value >= Cells(31, i + 2).Value And Cells(29, i + 2).Value <= Cells(32, i + 2)) Then 
      Cells(29, i + 2).Interior.Color = RGB(0, 255, 0) 
     Else 
      Cells(29, i + 2).Interior.Color = RGB(255, 0, 0) 
      isCorrect = False 
     End If 

    End If 

Next i 

Sheets("sheetname").Protect 

而且还可以使用细胞对象改变颜色。核实。我对你的代码做了小小的修改。

+0

对于任何想知道的人来说,Mac Excel 2016似乎绝对需要解除保护,而Windows Excel 2013与UserInterfaceOnly协同工作:True ... – virmaior