在工作表选择上激活/停用设计模式

问题描述 投票:3回答:3

真的很难与这一个。当用户离开特定工作表时,我试图将工作簿从设计模式中取出。我有一个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
excel vba excel-vba designmode
3个回答
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

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

没有经过全面测试,但应该提供帮助

谢谢。


0
投票

这适合我;

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

-1
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.