我希望编辑我当前的代码,因为它很长,但如果需要,我可以坚持下去。我的当前代码只是在每个按钮上重复,因为它通过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
最终结果均未成功。
这些都不起作用,并希望能够解决这些问题。或者为了解决我的错误,接受任何想法,但我必须保留我不能使用的按钮' Cell Selection'。
修改 如果可能的话,我的数组方法是可用的,我不熟悉使用ActiveX控件,所以任何建议都很可能非常有用。
我的工作簿解释了btn3代表什么。 http://i.stack.imgur.com/35p2f.png
答案 0 :(得分:1)
没有简单的方法可以Application.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
此外,您询问:
因为我有更新的方法来大规模地实现这一点,因为我有60多个“按钮”......
是。首先确保所有按钮调用相同的过程。然后,修改每个按钮的过程,如下所示。 注意我不能在没有调用单击事件的情况下进行双击工作,首先,这会产生不希望的效果,即无法“存储”范围的上一个颜色。您可以添加一些条件逻辑,暂时我已经硬编码,因此“撤消”功能将恢复为根本没有颜色:
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