簡體   English   中英

Excel 2010 VBA與設置單元格顏色

[英]Excel 2010 VBA With Setting Cell Colors

我正在嘗試使突出顯示過程自動化,以顯示某些行已完成。 這個過程效果很好,但是在我的工作表開始時,我試圖使代碼為工作表創建一個“鍵”,以顯示顏色的不同含義。 在密鑰中,白色,綠色和紅色用作尚未完成(白色),完成(綠色)和錯誤/未完成(紅色)的標簽。 灰色也用於私人管道。 我正在嘗試用相應的標簽為它們的顏色着色,綠色為綠色,紅色為紅色,等等。我已經為此編寫了適用於第一行的代碼,但在綠色上它並未將“綠色”單元格着色為綠色( (將其保留為白色),並在“紅色”上將單元格顏色着色為綠色。 這是我正在使用的代碼(對不起,因為我是編碼新手,所以很抱歉):

Sub SmartHighlight()
Dim Counter As Integer
Dim i As Integer
Dim j As Integer
Dim k As Range
Dim Chkr As Integer
Chkr = 0
xTitleId = "Smart Highlighter"
MsgBox "This macro analyzes the given pipe data to highlight completed sections."
For Each k In ActiveSheet.UsedRange.Rows
    Counter = 0
    i = 8
    For j = 0 To 3
        If ActiveSheet.Cells(k.Row, i).Value = 0 Then
            Counter = Counter + 1
        End If
        i = i + 1
    Next j
    If ActiveSheet.Cells(k.Row, 1) = "PIPE_ID" Then
        ActiveSheet.Cells(k.Row, 15).Value = "KEY:"
        ActiveSheet.Cells(k.Row, 16).Value = "White"
        ActiveSheet.Cells(k.Row, 17).Value = "Not yet completed."
        ActiveSheet.Cells(k.Row, 18).Value = "Grey"
        k.Cells(k.Row, 18).Interior.ColorIndex = 15
        ActiveSheet.Cells(k.Row, 19).Value = "Private."
    ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 0 Then
        ActiveSheet.Cells(k.Row, 16).Value = "Green"
        k.Cells(k.Row, 16).Interior.ColorIndex = 4
        ActiveSheet.Cells(k.Row, 17).Value = "Completed."
        Chkr = Chkr + 1
    ElseIf ActiveSheet.Cells(k.Row, 1) = "" And Chkr = 1 Then
        ActiveSheet.Cells(k.Row, 16).Value = "Red"
        k.Cells(k.Row, 16).Interior.ColorIndex = 3
        ActiveSheet.Cells(k.Row, 17).Value = "Error/Incomplete."
    ElseIf ActiveSheet.Cells(k.Row, 4) = "PRIVATE PIPE" Then
        k.EntireRow.Interior.ColorIndex = 15
    ElseIf Counter <> 4 Then
        k.EntireRow.Interior.ColorIndex = 4
    ElseIf Counter = 4 And ActiveSheet.Cells(k.Row, 14) = "" Then
        k.EntireRow.Interior.ColorIndex = 3
    End If
Next k



End Sub

這是excel中的輸出: 單擊以查看圖像

如果有人可以幫助我糾正着色錯誤,將不勝感激。 謝謝!

目前尚不清楚為什么要在ActiveSheet.Cellsk.Cells之間切換?

    ActiveSheet.Cells(k.Row, 18).Value = "Grey"
    k.Cells(k.Row, 18).Interior.ColorIndex = 15

在您的代碼中,范圍k代表工作表數據中的一行。 您可以使用Cells()獲得對該范圍內單個單元格的引用,但需要小心使用正確的索引,否則最終將得到一個甚至不屬於k的單元格。

例如,如果將k設置為工作表的第4行:

k.Cells(4).Address()

是D4,但是

k.Cells(k.Row,4).Address() 'same as k.Cells(4, 4).Address()

D7而不是D4

k.Cells(1, 4).Address()

將是D4。

我建議您創建一個子過程,當您運行宏時,該過程將更新標題/鍵等更多靜態信息。

這就是我最終在一個Excel宏小工具中完成的工作,該小工具是繪制標題行的一部分子程序:

Sub PrepareHeaders(szSheetName)
Sheets(szSheetName).Cells(iRow + 1, iCel) = "Add/Update"
Select Case szSheetName
    Case "Value Lists"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 1) = "Object Type Name Singular"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 2) = "Object Type Name Plural"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 3) = "ID"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 4) = "Real Object"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 5) = "Owner Type ID"
        Sheets(szSheetName).Cells(iRow + 1, iCel + 6) = "Aliases"
    End Select
    Sheets(szSheetName).Rows(iRow + 1).Font.Bold = True
    Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit
    Sheets(szSheetName).Cells(1, iCel).Select
End Sub

此外,您可以在Excel工作表中使用樣式。 可以從VBA調用這些樣式,並且如果您需要更改配色方案,則可以更改樣式以將格式應用於整個電子表格。

Sheets(szSheetName).Cells(iRow + 1, iCel + 5).Style = "Input"

要做的另一件事是適合您的輸入,最后選擇一些特定的單元格。

Sheets(szSheetName).Columns("A:Z").EntireColumn.AutoFit
Sheets(szSheetName).Cells(1, iCel).Select

還有一件事,您可能需要尋找條件格式。 這可能會提供一項附加功能。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM