Excel宏可更改当前所选单元格的背景颜色

时间:2019-02-08 10:43:04

标签: excel vba

我想与VBA一起练习。 我想编写一个宏,当我按下一个按钮时将当前选定单元格的背景色设置为默认选项(有人可以使用),有人可以帮忙吗? Morover,是否可以将某个单元格设置为Macro的激活按钮? 提前致谢! 古列尔莫

3 个答案:

答案 0 :(得分:3)

使用Selection获取当前选定的范围。

Selection.Interior.Color = vbRed 'change color of selection to red

或在Target中使用Worksheet_SelectionChange进行更改。

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Interior.Color = vbRed
End Sub

答案 1 :(得分:0)

工作表SelectionChange事件

如果已选择该单元格,则无法使用。这不是“单击”事件,您可以将其称为“选择”事件,即,如果在未选择它的情况下或者每次使用键盘移动到它时选择(单击)该单元格,它将被触发甚至即使您使用VBA来SelectActivate(未选择或激活它)也是如此。

代码

Module1

Option Explicit

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Const cCell As String = "A1"
    If Not Intersect(Target, Range(cCell)) Is Nothing Then
        Macro
    End If
End Sub

Sheet1

Option Explicit

Sub Macro()
    MsgBox "You got me started"
End Sub

答案 2 :(得分:0)

enter image description here

请尝试以下代码是否可以帮助您了解各种可能性。
只需选择一个单元格即可启动“ Sub Worksheet_SelectionChange”。
通过更改值,您可以启动“ Sub Worksheet_Change”。在下面的示例代码中,当更改的单元格在B1:E20的已定义目标范围内时,它们将变为黄色。

当您说“使用单元格作为按钮”时,这是您期望的吗?

您必须将此代码输入到工作表中。
(双击VBE编辑器中的工作表
,或者
在Excel中右键单击工作表名称,然后选择“查看代码”)

Option Explicit
Dim oldTarget As Range

Sub SetCellColor()
'
' SetCellColor Macro
' created with macrorecorder
'
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .Color = 65535
        .TintAndShade = 0
        .PatternTintAndShade = 0
    End With
End Sub

'google search for vba color integers
'http://dmcritchie.mvps.org/excel/colors.htm
Sub see_the_palette_in_Excel()
  Application.CommandBars("Fill Color").Visible = True   ' -- 40 colors
  Application.Dialogs.Item(xlDialogColorPalette).Show
End Sub

'SEARCH ON STACKOVERFLOW FOR worksheet_change target
'
'https://stackoverflow.com/search?q=worksheet_change+target
'e.g. https://stackoverflow.com/questions/39228431/select-target-sheet-in-worksheet-change

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("B1:E20")) Is Nothing Then
        Target.Interior.Color = RGB(255, 255, 0) 'yellow !
        Application.StatusBar = "Worksheet_Change: " & Target.Address
        Debug.Print "Worksheet_Change: " & Target.Address
    End If
End Sub

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Target.Interior.Color = RGB(0, 255, 0)
    On Error Resume Next
    If oldTarget.Interior.Color = vbGreen Then
        oldTarget.Interior.Pattern = xlNone
    End If
    On Error GoTo 0
    Application.StatusBar = "Worksheet_SelectionChange: " & Target.Address
    Debug.Print "Worksheet_SelectionChange: " & Target.Address
    Set oldTarget = Target
End Sub

Sub SetColor()
Dim ColStr As String
    ColStr = "255, 255, 255"
    ActiveCell.Interior.Color = RGB(Split(ColStr, ",")(0), Split(ColStr, ",")(1), Split(ColStr, ",")(2)) 'yellow ?
    ActiveCell.Offset(0, 1).Value = ColStr
    ActiveCell.Offset(1, 0).Select
End Sub

'vb code for basic colors
'http://access-excel.tips/excel-vba-color-code-list/
'vbBlack
'vbBlue
'vbCyan
'vbGreen
'vbMagenta
'vbWhite
'vbYellow