В VBA Я поставил Application.ScreenUpdating и другие параметры приложения, используя следующий класс:Хороший шаблон дизайна для установки Excel.Application.ScreenUpdating с VB.NET?
Option Explicit
Private Sub Class_Initialize()
Application.Cursor = xlWait
Application.ScreenUpdating = False
ae = Chr(228)
ao = Chr(229)
oe = Chr(246)
aeCap = Chr(196)
aoCap = Chr(197)
oeCap = Chr(214)
End Sub
Private Sub Class_Terminate()
Application.Cursor = xlDefault
Application.ScreenUpdating = True
End Sub
Я реализовал ее в каждой точке входа в мой код с:
Sub GetFilePathButton()
Dim runState As New cRunState
Set runState = New cRunState
'My Other Code
End Sub
Я был очень рад с этим. Application.ScreenUpdating позаботились. Мне не нужно было думать о том, что произойдет, когда будут выброшены ошибки или когда одна функция вызовет другую. В конце вещей процедура входа в класс завершится, а настройки приложения будут сброшены.
Я попытался использовать один и тот же шаблон проектирования в VB.NET
Public Class mApplicationSettings
Dim ExlApp As Excel.Application = CType(AddinModule.CurrentInstance, MyProject.AddinModule).ExcelApp.Application
Dim ScreenUpdating As Boolean
Public Sub New()
MyBase.New()
ScreenUpdating = ExlApp.ScreenUpdating
ExlApp.ScreenUpdating = False
End Sub
Protected Overrides Sub Finalize()
MyBase.Finalize()
ExlApp.ScreenUpdating = ScreenUpdating
End Sub
End Class
И называть его функций с:
Sub Test()
Dim appSet mApplicationSettings = mApplicationSettings
'My Other Code
End Sub
Это не очень хорошо работает. Sub New() вызывается и работает отлично. Но Sub Finalize() никогда не запускается. Поэтому настройки приложения никогда не будут сброшены.
У меня есть два вопроса, связанные с этим:
- Как вы думаете, это хороший шаблон дизайна для обработки параметров приложения в Excel?
- У меня нет работы, как я описал. Можете ли вы показать мне, что не так, или рекомендовать лучший дизайн?
Это хороший дизайн для VBA. Не так много для VB.Net, так как вы не знаете, когда вызывается (или если) финализаторы. Вам необходимо восстановить экранирование вручную непосредственно перед «End Sub». Поиск try..fain или dispose pattern – adrianm
В VBA выключение экрана не является постоянным - при завершении выполнения VBA установка экрана всегда возвращается к True. Не знаю, так ли это при использовании VB.NET –