2010-03-04 4 views
0

У меня есть лист Excel, который содержит два прямоугольника и текст в других ячейках. Мне нужно разрешить пользователям редактировать текст только в прямоугольнике. Они не должны изменять размер объекта. Применение блокировки на прямоугольнике блокирует объект, а также текст. Кто-нибудь знает, как я могу это достичь?В Excel, VBA - Как мы можем заблокировать изменение размера прямоугольника

ответ

0

Почему бы не создать два объекта, один из которых является заблокированным прямоугольником, а один - текстовым полем, которое не заблокировано? Это действительно упрощенное, но возможный ответ.

Еще одна идея заключалась бы в том, чтобы прямоугольник равнялся ячейке набора и позволял им вводить свой текст в ячейку, и он переносится даже тогда, когда прямоугольник заблокирован.

0

Насколько мне известно, Excel не вмещает события для фигур, и поэтому нет простого способа обнаружить изменение размера фигуры, а затем изменить размер фигуры.

Можно подражать тому, что вы просите, используя обходной путь.

Представьте, что у вас есть два прямоугольника в вашей таблице под названием «Прямоугольник 1 и« Прямоугольник 2 ». Когда пользователь завершает обновление текста в любом поле, он должен щелкнуть электронную таблицу, чтобы перейти из режима редактирования для фигуры. Вы можете обнаружить это, используя событие Workbook_SheetSelectionChange.

Следующий модуль позволяет установить размер прямоугольников, как константы и размер прямоугольников соответственно:

Const Rect1Height As Integer = 50 
Const Rect1Width As Integer = 200 

Const Rect2Height As Integer = 50 
Const Rect2Width As Integer = 200 

Sub SetRectangleSize() 

Dim Rect1 As Shape 
Dim Rect2 As Shape 

Set Rect1 = ActiveSheet.Shapes("Rectangle 1") 
Set Rect2 = ActiveSheet.Shapes("Rectangle 2") 

Rect1.Height = Rect1Height 
Rect1.Width = Rect1Width 
Rect2.Height = Rect1Height 
Rect2.Width = Rect1Width 

End Sub 

Теперь все, что вам нужно сделать, это вызвать этот подпункт из события на уровне рабочей книги:

Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range) 
SetRectangleSize 
End Sub 

Каждый раз, когда пользователь обновляет текст в одном из прямоугольников они нажимают назад на таблицу и события обжигают, в результате прямоугольники имеет размеры в соответствии с постоянной высоты и ширины параметров, которые вы определили.

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