Excel: текстовое поле объекта не может выполнять возврат каретки в защищенных или незащищенных состояниях листа (w / Text Unlocked) … почему?
Прежде всего, моя должная осмотрительность собрала массу ответов в отношении текстовых полей ActiveX, но ничего не было об объектных текстовых ящиках. Для моего проекта я не могу использовать ActiveX.
ОК, поэтому, когда лист незащищен, текстовое поле объекта (из Вставки> Формы) работает практически так, как я хочу: самое главное, чтобы я мог нажать клавишу Enter и получить возврат каретки. Затем я перехожу к свойствам формы и сниму флажок «Блокировать текст» и защищаю лист.
Однако, если защищенный лист защищен, способность выполнять возврат каретки (введите Enter и спуститься на одну строку) исчезнет. Shift + Enter и Alt + Enter тоже не работают.
- Excel VBA - Shapes Текстовое поле OnChange событие
- Как сделать текстовое поле ActiveX только для чтения, но прокручиваемым в Excel 2013?
- Как изменить цвет фона текстового поля с помощью кнопки
- Имя свойства динамически созданных текстовых полей
- Excel VBA Append для TextBox медленный
Возможно ли, чтобы эта функциональность была доступна? Есть ли обходные пути? Почему Excel ненавидят меня? Вот некоторые из моих идей:
- Unprotect Sheet, когда текстовое поле нажато / активировано, защитите, когда нет (не удалось определить синтаксис в VBA для этого. «Если Intersect …» – это то, что я думаю)
- Вставьте Word Doc Object (не нравится это, потому что один клик входит в редактирование строки формулы, и я не могу заставить шрифт оставаться)
- Просто используйте объединенную ячейку и попросите пользователей дважды щелкнуть, чтобы ввести и использовать Alt + Enter для новой строки.
В настоящее время выигрышным вариантом является использование объединенной ячейки, но мне просто нужно увидеть, будет ли ActiveX работать в нашей сети. Я действительно хочу придерживаться принципа KISS здесь, если это вообще возможно для конечного пользователя … Я не против кодирования в бэкэнде, чтобы он работал.
Спасибо за ваши мысли!
EDIT: Вот некоторые изображения, которые помогут …
Вот функциональность, которую я хотел бы иметь, когда мой лист защищен:
Далее это текстовое поле ActiveX с отображенным окном свойств (Developer> Design Mode> Properties). Свойства, которые делают его несколько пригодным для использования при защите листа, краснеют красным цветом, Multiline и Enter Key Behavior. Но опять же, я бы предпочел не использовать ActiveX … плюс, пользователь не может менять шрифт по строкам.
Наконец, я нашел это интересным: есть еще одно текстовое поле в элементе управления формы, которое выделено серым цветом. Из поиска, похоже, что это было убрано в пользу версии текстовых полей для рисования объектов … или, может быть, это одно и то же? Слева – объекты рисования, один – серединный элемент управления формой, а правый – это ActiveX.
В целом, я хотел бы просто посмотреть, есть ли способ иметь функциональные возможности текстового поля незащищенных форм листа, когда лист защищен.
- Как получить доступ к текстовому блоку, размещенному на листе в модуле VBA?
- Неверное текстовое поле в форме VBA
- VBA выводит значение ComboBox в следующую свободную ячейку в столбце
- Использование пользовательской формы VBA в Excel 2011 на Mac (запрограммировано в Windows): текстовое поле не работает
- Возвращаемое значение в текстовом поле из Combobox в Excel
- Каждый символ в TextBox разного цвета в vba excel
- Управление текстовым полем в Excel - как ссылаться в Perl
- Excel VBA; UserForm, запуск одного фрагмента кода для разных значений TextBox
Предполагая, что вы работаете с формой TextBox, вставленной с ленты, здесь:
Затем вы можете использовать необязательный параметр в методе Protect
:
Sheet1.Protect DrawingObjects:=False
Это позволит пользователю редактировать текстовые поля на листе, но сам лист останется защищенным.
Если вы используете элемент управления формой (вставленный из ленты Develper / Design), вы можете установить свойство .MultiLine
к .MultiLine
формы:
Sub test() Dim tb As Shape Dim x As Object 'Get a handle on the SHAPE Set tb = ActiveSheet.Shapes(2) 'You have to access its properties from the OLEFormat.Object: tb.OLEFormat.Object.Object.MultiLine = True End Sub
В моем тесте даже на защищенном листе это позволяет пользователю Shift + Enter вводить возврат каретки:
Ctrl + Shift + Enter работает на защищенном листе.