2014-01-09 3 views
3

Прямо сейчас я нахожусь в середине написания слегка сложной сети книг Excel, которая почти полностью управляется автоматизацией VBA, поэтому написано много макросов.Отдельная подпрограмма для методов применения?

Я пытаюсь отключить всплывающие окна, предупреждения и события, где это возможно. Чтобы сэкономить время и головные боли при отслеживании, где я мог включить/отключить их, я написал подпрограмму, в которой необходимые параметры для каждого передаются в качестве аргументов, поэтому вы можете настроить, что вы хотите включить/отключить в одной строке кода (или, по крайней мере, это идея в любом случае).

Это то, что подпрограмма выглядит следующим образом:.

Sub AppToggles(Optional ScrUpdating As Boolean = False, _ 
       Optional DispAlerts As Boolean = True, _ 
       Optional Events As Boolean = False) 

With Application  
    .ScreenUpdating = ScrUpdating 
    .DisplayAlerts = DispAlerts 
    .EnableEvents = Events 
End With  

End Sub 

Я называю это из различных других подпрограмм, в том же модуле с Call AppToggles(True, True, True) (или любой комбинацией желательно

Проблемы, подпрограмма Безразлично» Кажется, что-то ничего не делает.Это такая простая процедура, что переход через нее ничего мне не говорит. Наведение по ключевым словам показывает мне, что каждый переключатель не настроен на переданные аргументы.

Я мог бы настроить if я думаю, но мне любопытно, где я упал со следов: P

+0

Хороший вопрос. Я могу воспроизвести это поведение. Я пробовал несколько вещей, но пока я использую переменную, она не работает. –

ответ

3

Не Шаг через код ... Выполнить это нормально или F5

Ваша процедура отлично работает для меня.

Sub TestMe() 
Call AppToggles(False, False, False) 
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _ 
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _ 
"EnableEvents: " & Application.EnableEvents 
Call AppToggles(True, True, True) 
MsgBox "ScreenUpdating: " & Application.ScreenUpdating & vbCrLf & _ 
"DisplayAlerts: " & Application.DisplayAlerts & vbCrLf & _ 
"EnableEvents: " & Application.EnableEvents 
Call AppToggles(True, True, True) 
End Sub 
+0

Ты потрясающий, спасибо тебе большое. такая простая проверка, но мне это вообще не приходило в голову! –

+1

Нет проблем. Хорошая рутина! –

0

Поскольку вы заявили, что все автоматизировано, вы случайно отключили Application.EnableEvents? Я знаю, что иногда устанавливается значение False, чтобы предотвратить запуск BeforeSave при сохранении книги.

Если это так, установив его на True перед тем, как манипулировать ScreenUpdating и DisplayAlerts должен сделать трюк. Вы можете вернуться к False (или к значению, предоставленному параметром Events), если необходимо, после того, как все установлено.

+0

Я пытаюсь это, и я еще более смущен. Значение в подсказках, когда я перехожу через код, похоже, не соответствует часам, которые я настроил. –

Смежные вопросы