我正在使用 Excel 中的自定義 VSTO 功能區,更具體地說是一個如下所示的組:

使用下面的代碼,我想關閉/打開螢屏更新、計算、啟用事件等功能。
這不是我要使用它的方式,我將在單個宏中使用該功能,我想做的是在切換按鈕(DA、EE、SA、C)中指示每個專案的狀態,如我做了updateCheckboxes。我想這樣做,以防用戶遇到未處理的除錯錯誤,并且宏沒有到達狀態恢復的末尾。
我的問題出現在 .ScreenUpdating = False 時,因為這不再允許功能區自行重繪 ,因此切換按鈕不會顯示更新的值。
有沒有辦法強制重繪 功能區,即使螢屏更新設定為 false?
Private Sub Button6_Click(sender As Object, e As RibbonControlEventArgs) Handles
Button6.Click
With Globals.ThisWorkbook.Application
'.ScreenUpdating = False
.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationManual
.EnableEvents = False
.DisplayAlerts = False
End With
updateCheckboxes()
End Sub
Private Sub Button7_Click(sender As Object, e As RibbonControlEventArgs) Handles Button7.Click
With Globals.ThisWorkbook.Application
.DisplayAlerts = True
.EnableEvents = True
.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationAutomatic
'.ScreenUpdating = True
End With
updateCheckboxes()
End Sub
Private Sub updateCheckboxes()
With Globals.ThisWorkbook.Application
Me.tglDA.Checked = (.DisplayAlerts = True)
Me.tglEE.Checked = (.EnableEvents = True)
Me.tglSA.Checked = (.ScreenUpdating = True)
Me.tglC.Checked = (.Calculation = Microsoft.Office.Interop.Excel.XlCalculation.xlCalculationAutomatic)
End With
Application.DoEvents()
End Sub
uj5u.com熱心網友回復:
您需要呼叫Globals.ThisAddIn.RibbonUI?.Invalidate()以使 Excel 觸發功能區控制元件上的所有getVisible//回呼getEnabled,getLabel此時您可以回傳更新的控制元件標簽。
uj5u.com熱心網友回復:
ScreenUpdating當屬性設定為 false時,我認為功能區 UI(又名 Fluent UI)不會呼叫功能區回呼。但是,正如 Dmitry 所建議的,您可以嘗試使用介面的Invalidate方法IRibbonUI。IRibbonUI 介面的一個實體被傳遞給Load回呼:
Dim MyRibbon As IRibbonUI
Sub MyAddInInitialize(Ribbon As IRibbonUI)
Set MyRibbon = Ribbon
End Sub
Sub myFunction()
MyRibbon.Invalidate() ' Invalidates the caches of all of this add-in's controls
End Sub
不要忘記OnLoad在功能區 XML 中指定回呼:
<customUI … onl oad="MyAddinInitialize" …>
在以下系列文章中閱讀有關 Fluent UI 的更多資訊:
- 為開發人員自定義 2007 Office Fluent 功能區(第 1 部分,共 3 部分)
- 為開發人員定制 2007 Office Fluent 功能區(第 2 部分,共 3 部分)
- 為開發人員定制 2007 Office Fluent 功能區(第 3 部分,共 3 部分)
無論如何,我建議重新設計應用程式而不依賴于回傳默認值之外的任何內容,因此您可以啟動計時器或設定超時等以停止長時間運行或錯誤的任務。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/415481.html
標籤:
