2016-11-28 129 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

相關問題