我的问题是当我在工作簿中选择多个工作表时命令按钮无法响应。我在这里测试的工作簿只是为了研究和解决这个问题,我最初是在一个更复杂的工作簿中找到的。
我的工作簿共有 5 个工作表。sheet1 上有四个 ActiveX 命令按钮。这四个按钮启动代码以同时选择多个工作表或仅选择 sheet1。
一起选择多个工作表后,只能再次单击实际单击的最后一个按钮,工作表 1 上的其余按钮不再响应,例如它们被禁用或其他什么。一旦我手动取消选择工作表以便只选择 sheet1,控件就会开始正常工作。
奇怪..我认为这一定是 Excel 中的某种错误。如果我手动选择多个工作表而不是让代码来做,我也可以复制这个问题。
到目前为止,我的一些发现...
- 只要两张或更多张,我选择多少张似乎并不重要。
- VBA 代码选择或手动 SHIFT-CLICK 无关紧要。
- 一旦其他按钮被锁定,最后一个按钮激活仍然运行。
- 我只用 Excel 2010 得到这个,Excel 2007 没有这个问题。
- 我已经在一个孤立的工作簿中复制了这个问题,所以我认为这不是腐败问题。
4 个命令按钮执行如下所示的功能。如果代码运行,每个按钮都会标记相邻的单元格。我延迟了 1 秒,以验证连续两次单击按钮是否有效。
- CMD 1:仅选择 sheet1
- CMD 2:仅选择 sheet1
- CMD 3:选择 sheet1 和 sheet2
- CMD 4:通过模块1中的子例程选择sheet1到sheet4
这是我的代码附加到 sheet1....
Option Explicit
Private Sub CommandButton1_Click()
Call MarkCmdsAsInactive
Me.Select
Call WaitSeconds(1)
Range("E6").Value = "CMD 1 Works"
End Sub
Private Sub CommandButton2_Click()
Call MarkCmdsAsInactive
Me.Select
Call WaitSeconds(1)
Range("E10").Value = "CMD 2 Works"
End Sub
Private Sub CommandButton3_Click()
Call MarkCmdsAsInactive
Sheets(Array("Sheet1", "Sheet2")).Select
Call WaitSeconds(1)
Range("E14").Value = "CMD 3 Works"
End Sub
Private Sub CommandButton4_Click()
Call MarkCmdsAsInactive
Call SelectSomeSheets
Call WaitSeconds(1)
Range("E18").Value = "CMD 4 Works"
End Sub
Private Sub MarkCmdsAsInactive()
Range("E6").Value = "Inactive"
Range("E10").Value = "Inactive"
Range("E14").Value = "Inactive"
Range("E18").Value = "Inactive"
End Sub
Private Sub WaitSeconds(waitInSeconds As Variant)
Dim newHour As Variant
Dim newMinute As Variant
Dim newSecond As Variant
Dim waitTime As Variant
newHour = Hour(Now())
newMinute = Minute(Now())
newSecond = Second(Now()) + waitInSeconds
waitTime = TimeSerial(newHour, newMinute, newSecond)
Application.Wait waitTime
End Sub
在模块 1 中,我有...
Option Explicit
Sub SelectSomeSheets()
Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select
End Sub
2012-10-09 更新
这是在 Excel 2010 中复制此错误的简单方法...
- 在 sheet1 上放置 4 个命令按钮。
- 将下面的代码复制到 sheet1。
- 在每个“End Sub”语句上放置断点。
- 尝试单击仅选中 sheet1 的按钮。所有按钮启动例程。
- SHIFT-CLICK 选择一组工作表。
在选中工作表组的情况下再次尝试按钮。只有最后使用的按钮有效。
Private Sub CommandButton1_Click() End Sub
私有子 CommandButton2_Click() 结束子
私有子 CommandButton3_Click() 结束子
Private Sub CommandButton4_Click() End Sub