【问题标题】:Activate / deativate design mode on worksheet selection在工作表选择上激活/停用设计模式
【发布时间】:2016-02-10 10:43:25
【问题描述】:

在这个问题上真的很挣扎。当用户离开特定工作表时,我试图将工作簿退出设计模式。 我有一个 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

【问题讨论】:

  • 因为一旦打开 DesignMode 就不会运行任何代码,您可能需要提醒用户在离开前关闭 DesignMode。例如,在打开它之前,制作一个消息框,提醒他们在离开工作表之前这样做。
  • 除了@ScottHoltzman 提到的内容之外,您还可以在相应的工作表中放置一个表单控件并将testExit 宏分配给它。
  • 在许多 PC 中,开发人员选项卡可能不可见,因此要求用户在设计模式下点击可能不是最佳选择。在这种情况下,要么按照我的建议添加表单控件,要么将代码粘贴到模块中并为其分配快捷键,以便用户可以通过按下该键退出设计模式。
  • 希望避免任何用户输入,因为目标群体必须具备最低限度的 excel 技能。

标签: vba excel designmode


【解决方案1】:

这对我有用;

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

【讨论】:

    【解决方案2】:

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

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

    干杯。

    类似

    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
    

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

    未经过全面测试,但应该有所帮助。

    谢谢。

    【讨论】:

    • application.ontime 似乎是一个很好的解决方法,但对我来说,只会打开设计模式。你使用什么代码(或者你把它放在哪里)来触发设计模式触发器?
    • 这很好但不能解决退出设计模式的问题
    • 您是否使用隐藏工作表中的工作表名称进行了测试。我昨晚测试了它,它似乎对我有用。稍后我再看看。
    【解决方案3】:

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

    【讨论】:

    • 答案是设计模式已关闭宏。我会专注于帮助人们。如果是这样,你需要对 Scott 说同样的话。
    • OP 已经知道设计模式会关闭宏。他正在寻找另一种方法。 :)
    • 查看我的回复(作为评论发布在问题下方)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-23
    • 1970-01-01
    • 1970-01-01
    • 2021-04-19
    相关资源
    最近更新 更多