我想与VBA一起练习。 我想编写一个宏,当我按下一个按钮时将当前选定单元格的背景色设置为默认选项(有人可以使用),有人可以帮忙吗? Morover,是否可以将某个单元格设置为Macro的激活按钮? 提前致谢! 古列尔莫
答案 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)
如果已选择该单元格,则无法使用。这不是“单击”事件,您可以将其称为“选择”事件,即,如果在未选择它的情况下或者每次使用键盘移动到它时选择(单击)该单元格,它将被触发甚至即使您使用VBA来Select
或Activate
(未选择或激活它)也是如此。
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)
请尝试以下代码是否可以帮助您了解各种可能性。
只需选择一个单元格即可启动“ 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