在工作表选择上激活/取消激活设计模式

时间:2015-11-09 17:46:30

标签: excel vba excel-vba designmode

真的很难与这个人挣扎。当用户离开特定工作表时,我试图将工作簿从设计模式中取出。 我有一个co,它将从按钮中运行,使得工作表进入和退出设计模式。

现在我想在工作表上激活/取消激活这些事件。工作表激活很好并进入设计模式。

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

由于 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

3 个答案:

答案 0 :(得分:0)

刚刚上场,你可以尝试一下。

选择工作表时,将工作表的名称放在公共var中,然后启动application.ontime以检查每一秒活动工作表名称是否与此var不同,如果是,则ontime调用关闭设计模式,如果没有,则保留设计模式(您现有的代码)。刚试过VB IDE中的设计快速演示和Ribbon上的In Design,看起来它会起作用。

干杯。

这样的东西
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

当变量被删除时,您需要将工作表名称放在隐藏的工作表中。

未经过全面测试,但应该提供帮助。

感谢。

答案 1 :(得分:0)

这对我有用;

 CommandBars("Exit Design Mode").Controls(1).Execute    'Enter Design Mode
 CommandBars("Exit Design Mode").Controls(1).Reset      'Exit Design Mode

答案 2 :(得分:-1)

我认为设计模式会关闭宏。