更改范围颜色的按钮和 DblClick 以恢复更改
Buttons that change color of a Range and a DblClick to revert the changes
我正在寻找编辑当前代码的方法,因为它冗长冗长,但如果需要,我可以坚持使用。我当前的代码在每个按钮上简单地重复,因为它运行通过 ActiveX 按钮(这些按钮必须保留)。撤消操作是首选,但使用 RGB 改回颜色是一个可行的选择。
我的编码如下:
Private Sub btn3_Click()
Sheet1.Range("A84:J84").Interior.ColorIndex = 16
End Sub
这成功地将单元格范围更改为灰色,我现在需要双击以撤消操作或将颜色更改回原始颜色的操作;我做了两次尝试。
使用撤消功能。
Private Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End Sub
然后我换了个方法去改颜色
Private Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim color_index As Long
color_index = 10
Sheet1.Range("A84:J84").Interior.Color(color_index) = RGB(153, 153, 255)
End Sub
最终结果两次尝试均未成功。
这些都不起作用,想要 'work around' 或修复我的错误,接受任何想法,但我必须保留我不能使用的按钮 'Cell Selection'。
编辑
如果可能的话,我有一个可用的数组方法,我不擅长使用 ActiveX 控件,所以任何建议都可能非常有用。
我的工作簿解释了 btn3 代表什么。
http://i.stack.imgur.com/35p2f.png
没有简单的方法可以 Application.Undo
撤消宏执行操作的结果。您要么需要创建数据的 cache/copy 并还原为该数据,要么需要制定一种在自定义函数中实现 "undo" 的方法。
无论如何,你第二种方法的错误,这一行:
Sheet1.Range("A84:J84").Interior.Color(color_index) = RGB(153, 153, 255)
可以改为:
Sheet1.Range("A84:J84").Interior.ColorIndex = color_index
或者:
Sheet1.Range("A84:J84").Interior.Color = RGB(153, 153, 153)
或者,您可以执行自定义撤消功能,如下所示:
'## Module level variable
Dim previousColor As Long
Sub btn3_Click()
'## stores the current ColorIndex property of the range
' (assumes all cells have the same color)
previousColor = Sheet1.Range("A84:J84").Interior.ColorIndex
'## Applies the new color:
Sheet1.Range("A84:J84").Interior.ColorIndex = 16
End Sub
Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Sheet1.Range("A84:J84").Interior.ColorIndex = previousColor
End Sub
另外,您查询:
as I updated is there a way to do this on a mass scale as I have 60+ 'buttons'...
是的。首先确保所有按钮调用相同的过程。然后,修改每个按钮的程序,如下所示。 注意 如果不同时调用单击事件,我无法使双击工作,首先,它具有无法 "store" 前一个的不良影响范围的颜色。您也许可以添加一些条件逻辑,目前我已经硬编码,因此 "undo" 函数将恢复为 完全没有颜色 :
Dim previousColor As Long '
Private Sub CommandButton1_Click()
Debug.Print "click"
Call changeColor(CommandButton1)
End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "dbl click"
Call undoChangeColor(CommandButton1)
End Sub
Private Sub CommandButton2_Click()
Debug.Print "click"
Call changeColor(CommandButton2)
End Sub
Private Sub CommandButton2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "dbl click"
Call undoChangeColor(CommandButton2)
End Sub
Private Sub changeColor(btn As MSForms.CommandButton)
'Assumes all cells are same color initially
previousColor = -4142 '(none) 'Sheet1.Range("A84:J84").Interior.ColorIndex
'Get the row corresponding with each button:
Dim rng As Range
Set rng = Sheet1.Range("A" & btn.TopLeftCell.Row).Resize(1, 11)
rng.Interior.ColorIndex = 16 'Modify as needed
'you could assign the RGB() here
End Sub
Private Sub undoChangeColor(btn As MSForms.CommandButton)
'Get the row corresponding with each button:
Dim rng As Range
Set rng = Sheet1.Range("A" & btn.TopLeftCell.Row).Resize(1, 11)
rng.Interior.ColorIndex = previousColor
End Sub
我正在寻找编辑当前代码的方法,因为它冗长冗长,但如果需要,我可以坚持使用。我当前的代码在每个按钮上简单地重复,因为它运行通过 ActiveX 按钮(这些按钮必须保留)。撤消操作是首选,但使用 RGB 改回颜色是一个可行的选择。
我的编码如下:
Private Sub btn3_Click()
Sheet1.Range("A84:J84").Interior.ColorIndex = 16
End Sub
这成功地将单元格范围更改为灰色,我现在需要双击以撤消操作或将颜色更改回原始颜色的操作;我做了两次尝试。
使用撤消功能。
Private Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Application.EnableEvents = False
Application.Undo
Application.EnableEvents = True
End Sub
然后我换了个方法去改颜色
Private Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Dim color_index As Long
color_index = 10
Sheet1.Range("A84:J84").Interior.Color(color_index) = RGB(153, 153, 255)
End Sub
最终结果两次尝试均未成功。
这些都不起作用,想要 'work around' 或修复我的错误,接受任何想法,但我必须保留我不能使用的按钮 'Cell Selection'。
编辑 如果可能的话,我有一个可用的数组方法,我不擅长使用 ActiveX 控件,所以任何建议都可能非常有用。
我的工作簿解释了 btn3 代表什么。 http://i.stack.imgur.com/35p2f.png
没有简单的方法可以 Application.Undo
撤消宏执行操作的结果。您要么需要创建数据的 cache/copy 并还原为该数据,要么需要制定一种在自定义函数中实现 "undo" 的方法。
无论如何,你第二种方法的错误,这一行:
Sheet1.Range("A84:J84").Interior.Color(color_index) = RGB(153, 153, 255)
可以改为:
Sheet1.Range("A84:J84").Interior.ColorIndex = color_index
或者:
Sheet1.Range("A84:J84").Interior.Color = RGB(153, 153, 153)
或者,您可以执行自定义撤消功能,如下所示:
'## Module level variable
Dim previousColor As Long
Sub btn3_Click()
'## stores the current ColorIndex property of the range
' (assumes all cells have the same color)
previousColor = Sheet1.Range("A84:J84").Interior.ColorIndex
'## Applies the new color:
Sheet1.Range("A84:J84").Interior.ColorIndex = 16
End Sub
Sub btn3_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Sheet1.Range("A84:J84").Interior.ColorIndex = previousColor
End Sub
另外,您查询:
as I updated is there a way to do this on a mass scale as I have 60+ 'buttons'...
是的。首先确保所有按钮调用相同的过程。然后,修改每个按钮的程序,如下所示。 注意 如果不同时调用单击事件,我无法使双击工作,首先,它具有无法 "store" 前一个的不良影响范围的颜色。您也许可以添加一些条件逻辑,目前我已经硬编码,因此 "undo" 函数将恢复为 完全没有颜色 :
Dim previousColor As Long '
Private Sub CommandButton1_Click()
Debug.Print "click"
Call changeColor(CommandButton1)
End Sub
Private Sub CommandButton1_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "dbl click"
Call undoChangeColor(CommandButton1)
End Sub
Private Sub CommandButton2_Click()
Debug.Print "click"
Call changeColor(CommandButton2)
End Sub
Private Sub CommandButton2_DblClick(ByVal Cancel As MSForms.ReturnBoolean)
Debug.Print "dbl click"
Call undoChangeColor(CommandButton2)
End Sub
Private Sub changeColor(btn As MSForms.CommandButton)
'Assumes all cells are same color initially
previousColor = -4142 '(none) 'Sheet1.Range("A84:J84").Interior.ColorIndex
'Get the row corresponding with each button:
Dim rng As Range
Set rng = Sheet1.Range("A" & btn.TopLeftCell.Row).Resize(1, 11)
rng.Interior.ColorIndex = 16 'Modify as needed
'you could assign the RGB() here
End Sub
Private Sub undoChangeColor(btn As MSForms.CommandButton)
'Get the row corresponding with each button:
Dim rng As Range
Set rng = Sheet1.Range("A" & btn.TopLeftCell.Row).Resize(1, 11)
rng.Interior.ColorIndex = previousColor
End Sub