![](/img/trans.png)
[英]Excel VBA— Creating macro to change cell color and call other macros based on cell value
[英]Excel VBA Macro calling multiple Macros based on cell value
我正在嘗試編寫一個調用不同宏並更改單元格顏色的宏。 因此,如果整個列D(D4:D446)中的單元格等於某個值,則該宏將調用與該值相關聯的單獨宏。
換句話說,我想要的是,例如,如果范圍D7中的任何或多個單元格:D446 =“1000ABC”,“1000EFG”或“1000HIJ”,則列F7:F446中的任何/所有單元格將變為紅色以指示對於用戶,他們需要在F7:F446中單擊該單元格,當用戶單擊F列中的該單元格時,它將調用我已創建的正確宏。
示例:如果單元格D25 =“1000EFG”,則單元格F25將變為紅色,當用戶單擊單元格F25時,它將轉到與值1000EFG關聯的宏。 我已經創建了其他宏,我只需要將它們與此功能綁定在一起。 (這些值是假設的)
我遇到的問題是,無論單元格D中的值如何,當我單擊F列中的關聯單元格時,它將只帶一個宏和一個宏(不是與單元格D中的值關聯的正確宏) )。 我也不確定如何根據值更改單元格顏色的語法。 我似乎無法將這些功能集中在一個宏中。 我將發布我在下面嘗試過的代碼。 非常感謝任何幫助。 你們真棒,謝謝!
Sub gotorefs()
For Each c In Worksheets("JE").Range("D7:D446")
If c.Value = "1000GP" Then
Call gotoref1
Worksheets("JE").Range("F7:F446").Select.ActiveCell.Interior.ColorIndex = 3
ElseIf c.Value = "1000MM" Then
Call gotoref2
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "19FEST" Then
Call gotoref3
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "20IEDU" Then
Call gotoref4
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "20ONLC" Then
Call gotoref5
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "20PART" Then
Call gotoref6
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "20PRDV" Then
Call gotoref7
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "20SPPR" Then
Call gotoref8
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "22DANC" Then
Call gotoref9
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "22LFLC" Then
Call gotoref10
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "22MEDA" Then
Call gotoref11
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "530CCH" Then
Call gotoref12
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "60PUBL" Then
Call gotoref13
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "74GA01" Then
Call gotoref14
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "74GA17" Then
Call gotoref15
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "74GA99" Then
Call gotoref16
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
ElseIf c.Value = "78REDV" Then
Call gotoref17
Worksheets("JE").Range("F7:F446").Cell.Interior.ColorIndex = 3
End If
Next c
End sub
嘗試通過處理Worksheet_Change event
來完成它。 為此,請將其添加到工作表“JE”代碼模塊中 :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim c As Range: Set c = Range("D7:D446")
For Each c In c.Cells
Select Case c.Value
Case "1000GP", "1000MM", "19FEST", "20IEDU", "20ONLC", "20PART", "20PRDV", "20SPPR", "22DANC", "22LFLC", "22MEDA", "530CCH", "60POUBL", "74GA01", "74GA17", "74GA99", "78REDV"
Cells(c.row, "F").Interior.ColorIndex = 3
Case Else
Cells(c.row, "F").Interior.ColorIndex = 0
End Select
Next c
End Sub
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Target.Column = 6 And Target.Cells.count = 1 And Target.Interior.ColorIndex = 3 Then
Cancel = True
' Now call the appropriate routine according to column C
Select Case Target.Offset(0, -2).Value2
Case "1000GP": gotoref1
Case "1000MM": gotoref2
Case "19FEST": gotoref3
Case "20PRDV": gotoref4
Case "20IEDU": gotoref5
Case "20ONLC": gotoref6
Case "20PART": gotoref7
Case "20SPPR": gotoref8
Case "22DANC": gotoref9
Case "22LFLC": gotoref10
Case "22MEDA": gotoref11
Case "530CCH": gotoref12
Case "60POUBL": gotoref13
Case "74GA01": gotoref14
Case "74GA17": gotoref15
Case "74GA99": gotoref16
Case "78REDV": gotoref17
End Select
End If
End Sub
最后的建議,這種調度到這么多不同的例程的方式是乏味且容易出錯的。 您可能會想到遵循一些命名約定來使被調用的例程與值匹配。 例如,如果您將例程命名為Ref_1000GP
, Ref_1000MM
等,則第二個Select Case
語句將縮減為單行,如下所示:
CallByName "Ref_" & Target.Offset(0, -3).Value2
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.