Excel VBA 在我打开的文件中隐藏 Excel 工具栏、功能区等,而不会弄乱任何其他打开的工作簿

问题描述 投票:0回答:3
我使用以下代码隐藏所有栏并打开工作簿以提供应用程序的外观。从现在开始我将把它称为我的 EXCEL 应用程序样式文件。

我用来隐藏所有内容并定义宽度和高度的代码如下:

Sub UIHide() With Application .ScreenUpdating = False .Calculation = xlCalculationManual .WindowState = xlNormal .ExecuteExcel4Macro "Show.Toolbar(""Ribbon"",False)" .CommandBars("Full Screen").Visible = False .CommandBars("Worksheet Menu Bar").Enabled = False .DisplayStatusBar = False .DisplayScrollBars = False .DisplayFormulaBar = False .Width = 800 .Height = 450 End With With ActiveWindow .DisplayWorkbookTabs = False .DisplayHeadings = False .DisplayRuler = False .DisplayFormulas = False .DisplayGridlines = False .DisplayHorizontalScrollBar = False .DisplayVerticalScrollBar = True End With With Application .ScreenUpdating = True .Calculation = xlCalculationAutomatic End With End Sub
以及将所有内容重置回来的代码:

Sub UIShow() With Application .ExecuteExcel4Macro "Show.Toolbar(""Ribbon"",True)" .DisplayStatusBar = True .DisplayScrollBars = True .DisplayFormulaBar = True End With With ActiveWindow .DisplayWorkbookTabs = True .DisplayRuler = True .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True End With End Sub
然后我调用这些宏

Private Sub Workbook_Open() Call UIHide End Sub Private Sub Workbook_Activate() Call UIHide End Sub Private Sub Workbook_BeforeClose(Cancel As Boolean) Call UIShow End Sub Private Sub Workbook_Deactivate() Call UIShow End Sub
当我打开文件并关闭它(并且没有其他 Excel 文件打开)时,一切都会按照我的意愿进行。该文件打开时所有内容都隐藏,当我关闭它时,它也会关闭 Excel,当我使用任何其他 Excel 文件再次打开它时,一切都会恢复正常。

但是,我遇到的问题是,如果我在已经打开了另一个文件的情况下打开我的 EXCEL 应用程序样式文件,当我关闭 EXCEL 应用程序样式文件时,已打开的文件缺少滚动条,公式栏、状态栏和底部工作表选项卡。

    当我打开 EXCEL 应用程序样式文件且另一个文件已打开时的示例。

    EXCEL 应用程序样式文件按其预期,但我们可以在背面看到编辑栏、工作表选项卡和状态栏在另一个文件中消失。

    当我关闭它时,公式栏、滚动条、状态栏和工作表选项卡都丢失了。

我正在绞尽脑汁试图调整代码,但我似乎无法解决这个问题,这样当我的 EXCEL 应用程序样式文件除了对其本身进行更改之外,不会“搞乱”任何其他文件。这能实现吗?任何帮助将不胜感激。

提前谢谢

excel vba toolbar ribbon
3个回答
2
投票
我无法在单个工作簿中解决此问题,但这里有一个解决方法,似乎可以防止其他工作簿受到影响。

它使用用户打开的“feeder”工作簿,然后feeder工作簿可以打开一个新的Excel实例并加载App工作簿。然后喂食器关闭,让您的应用程序保持打开状态

Feeder 工作簿中所需的唯一代码用于工作簿打开事件...如下所示

Private Sub Workbook_Open() Dim oXL As Object Set oXL = CreateObject("Excel.Application") oXL.Workbooks.Open ("C:\YourAPP\YourAPP.xlsm") oXL.Visible = True AppActivate "YourApp.xlsm" ' Brings it to Front & gives it the Focus If Workbooks.Count = 1 Then Application.Quit Else ThisWorkbook.Close False End If End Sub
您可能需要一个

Application.Quit
也在您的应用程序中确保 Excel 实例关闭

更新:添加了以下行 - 不在原始代码中

`AppActivate "YourApp.xlsm" ' Brings it to Front & gives it` the Focus
    

0
投票
您所有的

UIShow

 代码都可以运行并工作吗?

Private Sub Workbook_BeforeClose(Cancel As Boolean) UIShow End Sub
先尝试激活其他工作簿


0
投票
我找到了另一种方法来解决这个问题,无需馈线工作簿。我必须找到另一种方法,因为我的工作簿具有指向我需要打开的另一个工作簿的链接,因此它不能位于另一个 Excel 实例中。

我只是让它在关闭时在所有其他打开的工作簿上执行 UIShow。 我发现它作为单独的子程序效果最好,然后从私人子程序中调用它。

Sub othWB() Dim WB As Workbook If Application.Workbooks.Count > 1 Then For Each WB In Workbooks WB.Activate Call UIShow With ActiveWindow .DisplayWorkbookTabs = True .DisplayHeadings = True .DisplayRuler = True .DisplayGridlines = True .DisplayHorizontalScrollBar = True .DisplayVerticalScrollBar = True End With Next End If End Sub
然后从私有关闭子中调用它:

Private Sub Workbook_BeforeClose(Cancel As Boolean) Call UIShow Call othWB End Sub
    
© www.soinside.com 2019 - 2024. All rights reserved.