Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel Can';t在工作簿关闭时更改应用程序设置_Excel_Vba - Fatal编程技术网

Excel Can';t在工作簿关闭时更改应用程序设置

Excel Can';t在工作簿关闭时更改应用程序设置,excel,vba,Excel,Vba,我在用户窗体上有一个退出按钮。如果用户单击它,我希望它将Excel的设置返回到原始值,然后关闭工作簿。退出按钮中的代码如下所示: Unload Me If g_Released Then ThisWorkbook.Close savechanges:=False End If 工作簿\u BeforeClose事件中的代码为: Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim bSaved As Boolean bSa

我在用户窗体上有一个退出按钮。如果用户单击它,我希望它将Excel的设置返回到原始值,然后关闭工作簿。退出按钮中的代码如下所示:

Unload Me

If g_Released Then
    ThisWorkbook.Close savechanges:=False
End If
工作簿\u BeforeClose事件中的代码为:

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim bSaved As Boolean

bSaved = ThisWorkbook.Saved 
ActiveWindow.DisplayWorkbookTabs = True

'more code here
最后一行不会显示工作簿选项卡。在代码中,我还尝试设置类似于
Application.DisplayFormulaBar=True
之类的内容,但它们都没有任何影响。看起来好像这些属性以某种方式被强制进入只读状态,但我不知道为什么

编辑:这是完整的代码

Private Sub Workbook_Open()

InitialiseVariables
Application.ScreenUpdating = False
HideExcelUI Application, False, True, False, "Some Company", "Budgeting Module Release 0.1", ThisWorkbook.Path & "\Logo.ico"
HideWorksheetsUI False, False, False
wsBackground.Select

With Application
    .WindowState = xlNormal
    .Height = frmMain.Height
    .Width = frmMain.Width
End With

Application.ScreenUpdating = True
DisplayFormInCenter frmMain

End Sub

Public Sub InitialiseVariables()

g_tDBfolder = ThisWorkbook.Path & "\"
Set g_cn = New ADODB.Connection

With g_cn
    .Provider = "Microsoft.ACE.OLEDB.12.0"
    .Properties("Data Source") = g_tDBfolder & g_tDBname
    .Open
End With

g_ScenarioIsSaved = True
g_ScenarioID = CLng([Scenario_ID])
Set g_rBudgetYear = [BudgetYear]
Set g_rStartMonth = [StartMonth]
Set g_rDealerName = [DealerName]
Set g_rScenario = [Scenario]

End Sub

Public Sub HideExcelUI(ByRef xlApp As Excel.Application, _
                        ByVal ShowFormulaBar As Boolean, ByVal ShowScrollBars As Boolean, ByVal ShowStatusBar As Boolean, _
                        Optional ByVal strApplicationCaption As String, Optional ByVal strWindowCaption As String, Optional ByVal strIcoFile As String)

With xlApp
    .ExecuteExcel4Macro "SHOW.TOOLBAR(""RIBBON"",FALSE)"
    .DisplayFormulaBar = ShowFormulaBar
    .DisplayScrollBars = ShowScrollBars
    .DisplayStatusBar = ShowStatusBar

    If strApplicationCaption <> "" Then
        .Caption = strApplicationCaption
    End If

    If strWindowCaption <> "" Then
        .Windows(1).Caption = strWindowCaption
    End If

    If strIcoFile <> "" Then
        SetIcon strIcoFile, 0
    End If

End With

End Sub

Public Sub HideWorksheetsUI(ByVal ShowGridlines As Boolean, ByVal ShowHeadings As Boolean, ByVal ShowWorkbookTabs As Boolean)

Dim ws As Worksheet, wsCurrent As Worksheet

Application.ScreenUpdating = False
Set wsCurrent = ActiveSheet

For Each ws In ThisWorkbook.Worksheets
    ws.Activate

    With ActiveWindow
        .DisplayGridlines = False
        .DisplayHeadings = False
        .DisplayWorkbookTabs = False
        .Caption = ""
    End With

Next

wsCurrent.Activate
Application.ScreenUpdating = True

End Sub

Public Sub DisplayFormInCenter(ByVal objForm As Object, Optional ByVal bModeless As Boolean)

With objForm
    .startupposition = 0
    .Left = Application.Left + (0.5 * Application.Width) - (0.5 * .Width)
    .Top = Application.Top + (0.5 * Application.Height) - (0.5 * .Height)

    If bModeless Then
        .Show vbModeless
    Else
        .Show
    End If

End With

End Sub

Private Sub ExitButton_Click()

Unload Me

If g_Released Then
    ThisWorkbook.Close savechanges:=False
End If

End Sub

Private Sub Workbook_BeforeClose(Cancel As Boolean)

Dim bSaved As Boolean, Success As Boolean
Dim UserResponse As Long

bSaved = ThisWorkbook.Saved
ActiveWindow.DisplayWorkbookTabs = True

If g_Released Then

    If Not g_ScenarioIsSaved Then
        UserResponse = MsgBox(Prompt:="There are unsaved changes in the current budget. Save changes?", Buttons:=vbYesNoCancel)

        If UserResponse = vbYes Then
            Success = SaveInputs(ActiveSheet)

            If Not Success Then
                MsgBox "Unexpected error. All inputs were not saved. Please contact vendor."
            End If

        ElseIf UserResponse = vbNo Then
            'Go ahead and close
        Else
            Cancel = True
        End If

    End If

End If

ResetIconToExcel
ThisWorkbook.Saved = bSaved

End Sub
Private子工作簿\u Open()
初始变量
Application.ScreenUpdating=False
HideExclui应用程序,False,True,False,“某些公司”,“预算模块0.1版”,ThisWorkbook.Path&“\Logo.ico”
HideWorksheetsUI假,假,假
wsBackground.Select
应用
.WindowState=xlNormal
.Height=frmMain.Height
.Width=frmMain.Width
以
Application.ScreenUpdating=True
显示格式中心frmMain
端接头
公共子变量()
g\u tDBfolder=此工作簿。路径&“\”
Set g_cn=New ADODB.Connection
与g_cn
.Provider=“Microsoft.ACE.OLEDB.12.0”
.Properties(“数据源”)=g_tDBfolder&g_tDBname
打开
以
g_ScenarioIsSaved=真
g_ScenarioID=CLng([场景ID])
设置g_rBudgetYear=[BudgetYear]
设置g_rStartMonth=[StartMonth]
设置g_rDealerName=[DealerName]
设置g_rScenario=[场景]
端接头
公共子HideExcelUI(ByRef xlApp作为Excel.Application_
ByVal ShowFormulaBar为布尔值,ByVal ShowScrollBars为布尔值,ByVal ShowStatusBar为布尔值_
可选的ByVal StraplicationCaption作为字符串,可选的ByVal strWindowCaption作为字符串,可选的ByVal StricFile作为字符串)
使用xlApp
.ExecuteExcel4Macro“显示.工具栏”(“功能区”),FALSE)
.DisplayFormulaBar=ShowFormulaBar
.DisplayScrollBars=显示滚动条
.DisplayStatusBar=ShowStatusBar
如果应用程序标题为“”,则
.Caption=StrapApplicationCaption
如果结束
如果strWindowCaption“”则
.Windows(1).Caption=strWindowCaption
如果结束
如果是strIcoFile“”,则
设置图标strIcoFile,0
如果结束
以
端接头
公共子HideWorksheetsUI(ByVal将网格线显示为布尔值,ByVal将标题显示为布尔值,ByVal将工作簿选项卡显示为布尔值)
将ws设置为工作表,将ws设置为当前工作表
Application.ScreenUpdating=False
设置wsCurrent=ActiveSheet
对于此工作簿中的每个ws。工作表
ws.Activate
使用ActiveWindow
.DisplayGridlines=False
.DisplayHeaders=False
.DisplayWorkbookTabs=False
.Caption=“”
以
下一个
wsCurrent.Activate
Application.ScreenUpdating=True
端接头
Public Sub DisplayFormInCenter(ByVal objForm作为对象,可选ByVal bModeless作为布尔值)
带objForm
.startupposition=0
.Left=应用程序.Left+(0.5*应用程序.宽度)-(0.5*宽度)
.Top=应用程序.Top+(0.5*应用程序高度)-(0.5*高度)
如果b无模那么
.显示无模式
其他的
显示
如果结束
以
端接头
私有子退出按钮(单击)()
卸下我
如果g_被释放的话
ThisWorkbook.Close savechanges:=False
如果结束
端接头
私有子工作簿\u关闭前(取消为布尔值)
Dim b保存为布尔值,成功保存为布尔值
Dim UserResponse尽可能长
b保存=此工作簿。已保存
ActiveWindow.DisplayWorkbookTabs=True
如果g_被释放的话
如果不保存g_场景,则
UserResponse=MsgBox(提示:=“当前预算中有未保存的更改。是否保存更改?”,按钮:=vbYesNoCancel)
如果UserResponse=vbYes,则
成功=保存输入(ActiveSheet)
如果不成功的话
MsgBox“意外错误。未保存所有输入。请与供应商联系。”
如果结束
ElseIf UserResponse=vbNo然后
“走吧,关上
其他的
取消=真
如果结束
如果结束
如果结束
重置IContoExcel
ThisWorkbook.Saved=b保存
端接头

在退出按钮或关闭前的工作簿中,是否在进行这些更改后保存工作簿?还要注意的是,如果保存文件,则
ActiveWindow.DisplayWorkbookTabs=True
将仅适用于该工作簿,而不适用于整个应用程序。我不会将工作簿保存到任何位置。
ActiveWindow.DisplayWorkbookTabs=True
将仅适用于ActiveWindow,并且在不保存该工作簿之前是临时的。考虑这个场景。code>1您打开工作簿
2
选项卡不可见
3
您设置DisplayWorkbookTabs=True
4
该窗口的选项卡将可见
5
如果保存工作簿,则下次打开工作簿时,选项卡将可见,否则默认为false(早期状态)问题是,即使我走到那条线上,什么也没发生。不会引发任何错误,但也不会显示活动窗口的工作簿选项卡。能否发布您正在使用的完整代码?