Excel VBA,如何在一个工作表格式(颜色)的下拉列表中使用选择另一个工作表上的一系列单元格

时间:2013-09-10 02:13:45

标签: excel vba excel-vba

从我收集的内容来看,条件格式不能跨工作簿中的工作表完成,所以我现在要做的就是使用VBA。

我想在sheet1的下拉列表中选择一个单词(让我们说“是”或“否”)!然后为一系列细胞着色; sheet3上的范围(“J3:P29”)!如果选择“是”,则范围将被着色,如果选择“否”,则范围将不会被着色。

我使用macrorecorder记录下面的代码。但是,它不会从下拉列表中记录选择。它只是用逗号代替了动作。

Sub RangeRed()
'
' RangeRed Macro
'

'
    Range("J3:P29").Select
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 255
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With

End Sub

我非常感谢一些帮助。谢谢!

1 个答案:

答案 0 :(得分:0)

你需要做出改变。

  1. 您需要利用工作表1上的Worksheet_Change事件来更新工作表3。
  2. 在您的代码中,您需要直接引用sheet3,因为您 将无法从sheet1工作表事件中选择它。
  3. 使用Target值,评估它是否符合您的要求 指定条件并根据需要更新sheet3
  4. 打开VB编辑器并打开Sheet1代码。然后粘贴以下代码。

    Private Sub Worksheet_Change(ByVal Target As Range)
    ' Target.Value will be contain the value of the changed cell
    If Target.Value = "Yes" Then 
        With ThisWorkbook.Sheets("Sheet3").Range("J3:J5").Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 255 
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    Else
        With ThisWorkbook.Sheets("Sheet3").Range("J3:J5").Interior
            .Pattern = xlSolid
            .PatternColorIndex = xlAutomatic
            .Color = 0 ' change to whatever color you want if Yes is not selected
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
    End If
    
    End Sub
    

    请注意Target将捕获工作表上更改的任何单元格区域。为了解决这个问题,您可以命名具有下拉列表的单元格,然后在Worksheet_Change事件中,只有在匹配范围的名称时才评估Target;例如

    If Target.Name = "MyDropDown" Then
         ' Evaluate the value of Target and update sheet3 as intended
    
    End If