2016-11-28 57 views
0

今天,我不得不第一次处理VBA。经过大约2个小时的研究,我放弃了,并最终提出了这个问题,这是相当简单的说明:VBA:某个列中的颜色单元,取决于值

在我的excel Pivot上,我搜索了一个带有特定标题“Percentage”的列。在找到这一列后,我想根据它们的值为单元格着色。 (> 1个绿,< 0.9红,< 1 UND> = 0.9黄色)

到目前为止,我找到列(因为它并不总是相同的列,我要寻找它)。但在我要访问的单元格的值,我得到一个类型missmatch错误(13)

Sub test() 
Dim x As Range 
    Cells.Find(What:="Percentage", After:=ActiveCell, LookIn:=xlFormulas _ 
     , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Activate 

    For Each x In ActiveCell.EntireColumn 
     If x.Value > 1 Then 
      x.Interior.ColorIndex = 10 
     End If 
    Next x 
End Sub 

正如你所看到的,我遍历列。这是否已经错了?

我希望我能好好解释一下我的问题,并期待一些帮助

+1

我不认为你需要使用VBA为此,你可以使用条件格式。请参阅[此处](https://support.office.com/en-gb/article/Use-a-formula-to-apply-conditional-formatting-fed60dfa-1d3f-4e13-9ecb-f1951ff89d7f)以获取更多信息 – Jordan

回答

0

不幸的是,通过ActiveCell.EntireColumn循环不返回每个单独的小区,它只是返回一个Range,这是整列。尝试通过指数循环,而不是:

Sub test() 
    Dim columnNumber As Long 
    columnNumber = Cells.Find(What:="Percentage", After:=ActiveCell, LookIn:=xlFormulas _ 
     , LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
     MatchCase:=False, SearchFormat:=False).Column 
    Dim i As Long 
    For i = 1 To ActiveSheet.UsedRange.Rows.Count 
     If Cells(i, columnNumber).Value > 1 Then 
      Cells(i, columnNumber).Interior.ColorIndex = 10 
     End If 
    Next i 
End Sub 
0

您应该遍历:
ActiveCell.EntireColumn.Cells
在另一方面,循环槽整列似乎砥不是一个很好的主意,你应该尝试的条件格式乔丹提到,或尝试检索您的表使用的范围。

+0

isn这更适合作为评论吗?而且,循环遍历一个'EntireColumn'几乎不是一个好主意。我会说从来不是一个好主意,除非整个列实际上都有数据。 –

0

感谢您的回复。 我试图用条件格式来实现它,但它甚至有可能,因为我的列的位置每月都在变化?

@bobajob 我试图运行你的代码,但我得到了一个typemissmatch(13)错误的位置:

If Cells(i, columnNumber).Value > 1 Then

相关问题