У меня есть документ, который функционирует (используя многие уже написанные и функционирующие макросы), чтобы по существу стоять в качестве визуального представления календаря, который затем можно экспортировать на графический объект PowerPoint. Из-за того, как этот процесс ведется, важно, чтобы между каждой строкой данных сохранялись пустые строки. Я написал свои собственные функции сортировки и фильтрации, чтобы сохранить это условие, предоставляя пользователю надлежащую функциональность, и теперь я работаю над защитой документов.Предотвратить использование пользователем функций встроенной сортировки Excel
Таким образом, основной вопрос, который у меня есть (хотя это может быть распространен в целом на все действия в листе), является то, можно ли ограничить пользователей от использования функций сортировки по умолчанию от excel (так как это немедленно уничтожило бы структура данных)?
Чтобы уточнить, лист уже имеет защиты и снятие защиты функциональности, но мне нужно AllowSorting
свойства оставаться ложными даже когда лист не защищен. Это возможно?
Edit:
Я попытался решить эту проблему, не снятие защиты листов, но вместо того, чтобы защищать их все защиты «выключено» за исключением свойств AllowSorting и AllowFiltering, которые остаются ложны в обеих отпираются и запираются конфигурация , Тем не менее, это все еще позволяло сортировать данные, когда листы были «разблокированы»
Редактирование 2: Поскольку необходимо дальнейшее объяснение, у меня уже есть макросы, которые защищают и снимают защиту с листа соответственно. Мне нужно предоставить FULL функциональность любому пользователю, у которого есть правильный пароль, , за исключением сортировки, так как никто не должен использовать функции сортировки. Мой код для этих функций показан (сокращенно) ниже:
Sub LockSheets()
For Each WS In ActiveWorkbook.Worksheets
WS.Protect Password:=MasterPass, _
DrawingObjects:=True, _
Contents:=True, _
Scenarios:=True, _
AllowFormattingCells:=False, _
AllowFormattingColumns:=False, _
AllowFormattingRows:=False, _
AllowInsertingColumns:=False, _
AllowInsertingRows:=False, _
AllowInsertingHyperlinks:=False, _
AllowDeletingColumns:=False, _
AllowDeletingRows:=False, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
Next WS
End Sub
Sub UnlockSheets()
For Each WS In ActiveWorkbook.Worksheets
WS.Protect Password:=MasterPass, _
DrawingObjects:=False, _
Contents:=False, _
Scenarios:=False, _
AllowFormattingCells:=True, _
AllowFormattingColumns:=True, _
AllowFormattingRows:=True, _
AllowInsertingColumns:=True, _
AllowInsertingRows:=True, _
AllowInsertingHyperlinks:=True, _
AllowDeletingColumns:=True, _
AllowDeletingRows:=True, _
AllowSorting:=False, _
AllowFiltering:=False, _
AllowUsingPivotTables:=False
Next WS
End Sub
Это просто функция сортировки, которую вы не хотите использовать пользователям или не позволяете им что-либо менять на этом листе? –
@Tom В частности, функция сортировки, хотя я бы хотела, чтобы удовлетворить мою любознательность, узнать, как отключить любые встроенные функции. Я построил в мягких ценных бумагах, чтобы гарантировать, что только пользователи с паролем (с указанием того, что они были обучены использованию документа) могут выполнять любые процедуры редактирования, но я хочу избежать случайного использования функции сортировки, пока документ доступен для редактирования – RGA
Вы можете посмотреть на это: http://stackoverflow.com/questions/28979396/excel-vba-filter-change-event-handler или это http://stackoverflow.com/questions/1362342/how-to -detect-if-filters-changed-on-a-sheet и для отключения всех изменений вы всегда можете «Защитить» свой рабочий лист, щелкнув правой кнопкой мыши на своем листе и отметьте «Защитить лист ...» :) –