激活/取消激活工作表select的devise模式

真的很苦恼这个。 我正尝试在用户离开特定工作表时将工作簿从devise模式中提取出来。 我有一个从button进入和退出devise模式的button。

现在我想在工作表上激活/closures事件。 工作表激活良好,进入devise模式。

但是,VBA从代码devise模式出现问题。 我错过了什么 还是有一个完全不同的方式来解决这个问题。

感谢:D

Sub testEnter() EnterExitDesignMode True End Sub Sub testExit() EnterExitDesignMode False End Sub Sub EnterExitDesignMode(bEnter As Boolean) Dim cbrs As CommandBars Const sMsoName As String = "DesignMode" Set cbrs = Application.CommandBars If Not cbrs Is Nothing Then If cbrs.GetEnabledMso(sMsoName) Then If bEnter <> cbrs.GetPressedMso(sMsoName) Then cbrs.ExecuteMso sMsoName Stop End If End If End If End Sub 

刚刚玩,你可以试试这个。

select工作表时,将工作表的名称放入公共variables中,然后启动一个application.ontime来检查每一秒是否活动工作表名称与此var不同,如果是这样,ontime调用将closuresdevise模式,如果不是,则保留devise模式(您现有的代码)。 只是在VB IDE和function区中的devise中尝试了一个devise快速演示,看起来像它会工作。

干杯。

就像是

 Sub EnterExitDesignMode(bEnter As Boolean) Dim cbrs As CommandBars Const sMsoName As String = "DesignMode" Application.OnTime Now + TimeSerial(0, 0, 1), "TIMER_TEST" Set cbrs = Application.CommandBars If Not cbrs Is Nothing Then If cbrs.GetEnabledMso(sMsoName) Then If bEnter <> cbrs.GetPressedMso(sMsoName) Then cbrs.ExecuteMso sMsoName Stop End If End If End If End Sub Public Sub TIMER_TEST() If ActiveSheet.Name = strSheetName Then EnterExitDesignMode True Else End If End Sub 

您需要将表格名称放在隐藏表格中,因为variables被删除。

没有完全testing,但应该协助。

谢谢。

我认为devise模式将closuresmacros观。

Interesting Posts