Excel Can';t在工作簿关闭时更改应用程序设置
我在用户窗体上有一个退出按钮。如果用户单击它,我希望它将Excel的设置返回到原始值,然后关闭工作簿。退出按钮中的代码如下所示: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
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=True4
该窗口的选项卡将可见5
如果保存工作簿,则下次打开工作簿时,选项卡将可见,否则默认为false(早期状态)问题是,即使我走到那条线上,什么也没发生。不会引发任何错误,但也不会显示活动窗口的工作簿选项卡。能否发布您正在使用的完整代码?