2016-07-07 127 views
0

我想根据多个条件和单元格的选择在一系列单元格中填充颜色。这里是代码对象范围失败

Sub color() 



    Dim j As Integer 
    Dim testfallname As String 
    Dim rng As Range 
    Dim rCell As Range 
    Dim UnionRange As Range 
    Dim wb As Workbook 
    Dim ws As Worksheet 

    Set wb = ThisWorkbook 
    Set ws = wb.Sheets("1-BR_Vorschlag") 

    ws.Activate 
    For j = 7 To 1000 
If ws.Cells(1, j) = "ARB11" Or ws.Cells(1, j) = "FVB1" Or ws.Cells(1, j) = "FVB4E" Then 
testfallname = Cells(5, j) 
Set rng = ws.Range("G5:AQ5").Find(testfallname) 
End If 

    Set UnionRange = Union(ws.Range(Cells(34, rng.Column), ws.Range(Cells(39, rng.Column), ws.Range(Cells(49, rng.Column), Cells(50, rng.Column), ws.Range(Cells(53, rng.Column), Cells(54, rng.Column), ws.Range(Cells(59, rng.Column), Cells(61, rng.Column), ws.Range(Cells(66, rng.Column), Cells(77, rng.Column), ws.Range(Cells(85, rng.Column), Cells(97, rng.Column))))))))) 


With ws 
    For Each rCell In UnionRange 
     If rCell.Value = vbNullString Then 
      rCell.Interior.color = 8421504 
     End If 
    Next rCell 
End With 
Next j 

这里是实际的代码。现在我再次收到一个错误,指出错误的参数或无效的属性赋值。它调试联合范围线。我哪里错了?

+0

的可能的复制[VBA Excel宏:使用范围作用于不同的工作表(http://stackoverflow.com/questions/2656443/vba-excel-macro-use-range-to-act-不同的工作表) – GSerg

+1

作为一个方面说明,你不需要'With',你应该使用条件格式来根据值为单元格着色。 – GSerg

+0

什么行给你错误?我很肯定你必须使用'ColorIndex'而不是'Color'。 –

回答

0

您将目标工作表放在错误的位置。您可以使用它像这样(这些值是随机的一个例子的缘故):

Set UnionRange = Union(sheets("1-BR_Vorschlag").Range(cells(3, 10), cells(8, 9)), sheets("1-BR_Vorschlag").Range(cells(13, 22), cells(28, 49))) 

基本上只是移动内部工会的目标,它应该工作的罚款。我认为它可以这样工作,所以你可以同时在不同的工作表范围内使用联合。

+0

嗨我只是用你的想法,我有这样的事情设置UnionRange =联合(Ws.Range(细胞(50,10),(细胞(60,10)),Ws.Range(细胞(75,10), (Cells(90,10))))),现在它给了我错误的论证数量或无效的属性分配。 –

+0

你把“单元格(60,10)”的支架放在面前,并没有关闭它,所以它搞砸了。 您实际上并不需要在范围中的第二个“单元格”周围的额外括号,我下面的内容将工作 'Set UnionRange = Union(ws.Range(cells(50,10),cells(60, 10)),ws.Range(单元格(75,10),单元格(90,10)))' 如果此作品单击复选标记! – nick

+0

我又有同样的问题。我在问题 –

0

您可以使用SpecialCells(xlCellTypeBlanks)一次选择所有空白单元格。

Sub color() 

    Dim r As Range 
    With Worksheets("1-BR_Vorschlag") 
     Set r = Union(.Cells(34, 7), .Cells(39, 7), .Cells(49, 7), .Cells(50, 7), .Range(.Cells(53, 7), .Cells(54, 7)), .Range(.Cells(59, 7), .Cells(61, 7)), .Range(.Cells(66, 7), .Cells(77, 7)), .Range(.Cells(85, 7), .Cells(97, 7))) 
     Set r = r.SpecialCells(xlCellTypeBlanks) 
     If Not r Is Nothing Then r.Interior.color = 8421504 
    End With 

End Sub 

我发现使用联合方法有点乏味我更喜欢创建一个字符串并使用Range方法。

Sub Color2() 

    Dim r As Range 
    Set r = Worksheets("1-BR_Vorschlag").Range("$G$34,$G$39,$G$49:$G$50,$G$53:$G$54,$G$59:$G$61,$G$66:$G$77,$G$85:$G$97") 
    Set r = r.SpecialCells(xlCellTypeBlanks) 
    If Not r Is Nothing Then r.Interior.color = 8421504 

End Sub 
相关问题