В Excel, VBA - Как мы можем заблокировать изменение размера прямоугольника - PullRequest
0 голосов
/ 04 марта 2010

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

Ответы [ 2 ]

0 голосов
/ 11 марта 2010

Насколько мне известно, 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

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

0 голосов
/ 04 марта 2010

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

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

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