Мне нужно временно сохранить настройки моего макроса для каждого рабочего листа. Я думал о расширении свойств активного листа, чтобы сохранить настройки там. Целью было бы прочитать свойство, такое как ActiveSheet.Setting1. Я попробовал оборачивать объект ActiveSheet в классе:Каков наилучший способ хранения настроек для каждой рабочей таблицы?
"cCustomSheet" Класс модуля:
Public WithEvents WS As Worksheet
Public Setting1 As String
модуль "Module1":
Dim ActiveWS As cCustomSheet
Sub test1()
Set ActiveWS = New cCustomSheet
Set ActiveWS.WS = ActiveSheet
End Sub
Sub test2()
MsgBox ActiveWS.WS.Name
End Sub
Этот код работает без ошибок, но ActiveWS
должен обновляться до нового активного листа, если пользователь активирует другой лист, а это не так. Если удалить Set
ключевое слово из строки Set ActiveWS.WS = ActiveSheet
, я получаю следующее сообщение об ошибке:
Error n° 91: Object variable or With block variable not set
Как я должен это сделать, и это даже возможно?
Я также думал об использовании ActiveSheet.CustomProperties, но это кажется довольно неуклюжим, поскольку вы не можете получить параметр по его имени (без перебора всех элементов), и вам нужно полагаться на номера индексов.
Заранее спасибо.
Обновление: Я должен добавить, что мой макрос будет сохранен как надстройка Excel, поэтому у меня не будет доступа к коду книг для пользователей. Я не могу воспользоваться событием Worksheet_Activate(), чтобы отслеживать активный лист. Кроме того, настройки будут предпочтительно потеряны или сброшены до значений по умолчанию, когда рабочая книга будет снова открыта, поэтому я не могу сохранить их в файле пользователя (например, в скрытом листе).
Спасибо за это предложение. Однако мой макрос хранится в надстройке Excel, что означает, что он будет использоваться в других книгах. Я не могу коснуться кода книги, на которой он будет использоваться. Кроме того, пользователи, вероятно, будут работать с несколькими листами одновременно, а это значит, что мой макрос будет поддерживать свои настройки для каждого из листов одновременно. Если я сохраню листы в коллекции, как отслеживать, что это? Мне, вероятно, придется полагаться на номера индексов или имена листов, которые я не хотел в первую очередь. Например, если лист переименовывается, он должен сохранять свои настройки. – Cutter
Ответ на отслеживание заключается в использовании кодовых имен листов, по крайней мере предполагая, что вы создали или имеете доступ к исходным версиям книг, на которых они будут работать. К счастью, я просто написал сообщение об этом в своем новом блоге по адресу: http://yoursumbuddy.com/using-worksheet-codenames-in-other-workbooks/. Кроме того, если вы посмотрите на первый пост, есть пример добавления списков в коллекцию, немного другого, но это может помочь. До сих пор все это проблемы. –
Я также должен добавить, что я предпочел бы, чтобы настройки не были постоянными. Пользователь может сохранить свою книгу и отправить ее кому-то еще, и мой макрос будет вести себя с предпочтениями предыдущего пользователя, что может сбить с толку. – Cutter