我的问题是当我在工作簿中选择多个工作表时命令按钮无法响应。我在这里测试的工作簿只是为了研究和解决这个问题,我最初是在一个更复杂的工作簿中找到的。
我的工作簿共有 5 个工作表。 sheet1 上有四个 ActiveX 命令按钮。这四个按钮启动代码以同时选择多个工作表或仅选择 sheet1。
一起选择多个工作表后,只能再次单击实际单击的最后一个按钮,工作表1上的其余按钮不再响应,例如它们被禁用或其他什么。一旦我手动取消选择工作表以便只选择 sheet1,控件就会开始正常工作。
奇怪..我认为这一定是 Excel 中的某种错误。如果我手动选择多个工作表而不是让代码来做,我也可以复制这个问题。
到目前为止,我的一些发现...
4 个命令按钮执行如下所示的功能。如果代码运行,每个按钮都会标记相邻的单元格。我延迟了 1 秒,以验证连续两次单击按钮是否有效。
这是我的代码附加到 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 中复制此错误的简单方法...
私有(private)子 CommandButton1_Click()
结束子
私有(private)子 CommandButton2_Click()
结束子
私有(private)子 CommandButton3_Click()
结束子
私有(private)子 CommandButton4_Click()
结束子
最佳答案
我想这与 ActiveX 按钮的“范围”有关(即范围是 sheet1 而不是 sheet1+sheet2+...)。似乎选择多个工作表会停用工作表 1 中的命令按钮,即使工作表 1 仍然是“事件”工作表。因为 ActiveX 组件是 sheet1 专用的。
作为一种解决方法,我移动了您的 Sub CommandButtonX_Click
到模块 1,删除 Private
关键字,创建了一个自定义功能区 MyTools,其中 4 个 Sub 作为可选元素。通过这种方式,我将子组件的可见性从工作表级别移动到应用程序级别和所有工作。
当然我也不得不改变Me.Select
进入 Sheets("Sheet1").Select
(尽管我讨厌这样的硬编码......)
希望有帮助...
关于Excel VBA 2010 - 命令按钮停止使用选定的多个工作表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12775558/