如何禁用使用另一个子的VBA子

时间:2018-10-16 16:26:51

标签: excel vba

我有一个工作簿,其设计目的实质上是作为一个独立的应用程序进行操作。所有工作表均受保护,每个Excel标签都被隐藏,整个工作簿的顶部excel功能区也被隐藏。

下面的VBA代码执行上述过程,并应用于工作簿中的每个工作表。

Sub masque()

Application.ScreenUpdating = False
Application.EnableEvents = False
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",False)"
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayFullScreen = True
Application.DisplayStatusBar = Not Application.DisplayStatusBar
Application.WindowState = xlMaximized
ActiveWindow.WindowState = xlMaximized
Application.DisplayFormulaBar = False
Application.EnableEvents = True
Application.ScreenUpdating = True

End Sub

我想使用以下代码作为按钮来覆盖先前的代码,以便个人可以轻松地在“编辑器”模式和“用户模式”之间切换

Sub masteredit()

Application.ScreenUpdating = False
ActiveWindow.View = xlNormalView
ActiveWindow.DisplayHeadings = False
ActiveWindow.DisplayGridlines = False
ActiveWindow.DisplayWorkbookTabs = False
Application.DisplayStatusBar = False
ActiveWindow.DisplayHorizontalScrollBar = True
ActiveWindow.DisplayVerticalScrollBar = True
ActiveWindow.DisplayWorkbookTabs = True
Application.DisplayFullScreen = False
Application.DisplayFormulaBar = True
Application.ExecuteExcel4Macro "SHOW.TOOLBAR(""Ribbon"",True)"
Application.ScreenUpdating = True

什么是完成此任务的好方法?

2 个答案:

答案 0 :(得分:0)

好吧,您可能拥有预定类型的用户,例如,默认情况下,该应用程序将用于user_mode。因此,您使用了一个名为auto_open()的特殊子项,该子项将在每次打开工作簿时运行。所以我们有

sub auto_open()
call masque
end sub

并且您可以随时在编辑器模式和用户模式之间切换时添加按钮。您可以将sub auto_open()放在所需的任何模块中,因为Vba会将其检测为特殊

答案 1 :(得分:0)

解决了这个问题。

我忘了我在工作簿的每张纸上都有以下代码。

DynamicLink dynamicLink = FirebaseDynamicLinks.getInstance().createDynamicLink()
    .setLink(Uri.parse(link))
    .setDynamicLinkDomain("richdad.page.link")
    .setAndroidParameters(new DynamicLink.AndroidParameters.Builder("in.geekunit.richdad").build())
    .buildDynamicLink();

General.Show(MainActivity.this, "Long link " + dynamicLink.getUri().toString());

FirebaseDynamicLinks.getInstance().createDynamicLink()
    .setLongLink(dynamicLink.getUri())
    .buildShortDynamicLink().addOnCompleteListener(this, new OnCompleteListener<ShortDynamicLink>() {
@Override
public void onComplete(@NonNull Task<ShortDynamicLink> task)
{
    General.Show(MainActivity.this, "onComplete");
    if (task.isSuccessful())
    {
        mInvitationUrl = task.getResult().getShortLink();
        General.Show(MainActivity.this, mInvitationUrl.toString());
    }
    else
    {
        General.Show(MainActivity.this, "Error");
    }
}
});

因此,每当我尝试导航到其他工作表时,都将使用该遮罩。

为解决我的问题,我从每个页面中删除了先前的代码。然后,我在“主页”页面上添加了一个使用以下代码的复选框。

Sub Worksheet_Open()
Call masque
End Sub
Sub Worksheet_Activate()
Application.ScreenUpdating = False
Call masque
Application.ScreenUpdating = True
End Sub

这样,当您打开工作簿时,将自动应用面具。但是,当您单击复选框时,将进入编辑器模式,并且将应用masteredit子目录。取消选中后,会再次应用面膜。