Точно расположите новую опциональную кнопку в VBA

191
Kenny

Есть ли способ точного позиционирования и определения размера новой опции в VBA или макросе?

Код, который я использую, вставляет новую кнопку «Option», в которой в настоящий момент на листе выбирается любая ячейка.

Если вы снова запустите код, он вставит 2-ю кнопку точно поверх первой.

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

Что мне нужно сделать, это указать в коде ячейку, в которую я хочу вставить новую опциональную кнопку, F15, и установить точный размер кнопки и положение влево / вправо и вверх / вниз.

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

Можно ли это сделать?

Код для создания / вставки новой кнопки выбора:

Sub AddOptionButton() With ActiveSheet.OptionButtons.Add(Selection.Left, Selection.Top,  Selection.Width, Selection.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Sub 
0

1 ответ на вопрос

0
cybernetic.nomad

В общем, вы хотите избежать использования выделений в коде

Вы можете назначить диапазон переменной и поместить в нее кнопку:

Sub AddOptionButton() Dim myRange as Range  Set myRange = Range("C3") With ActiveSheet.OptionButtons.Add(myRange.Left, myRange.Top, myRange.Width, myRange.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Sub 

Но может быть лучше передать диапазон функции:

Function AddOptionButton(myRange as Range) With ActiveSheet.OptionButtons.Add(myRange.Left, myRange.Top, myRange.Width, myRange.Height) .Name = "NewOptionButton" .Caption = "Green" End With End Function 

Который вы можете позвонить из любого места в вашем Sub:

Call AddOptionButton(Range("F15")) 
Выглядит хорошо, и я попробую это, но, пожалуйста, прости мое невежество, когда я спрашиваю это - что такое myRange? это то, что я должен изменить или я использую это как есть? Kenny 2 года назад 0
MyRange - это переменная. Вы можете объявить это так: `Dim myRange as Range` (ответ отредактирован, чтобы отразить это) cybernetic.nomad 2 года назад 0
A `Function` that doesn't make use of its return value should be a `Sub`, imo. A function is not defined by the fact that it can take arguments, it's by its ability to return a value/object. `Sub`s can take arguments just fine. So make it `Sub AddOptionButton(myRange as Range)` **or** have it return a reference to the button it created: `Function AddOptionButton(myRange as Range) as OptionButton`. Also, the `Call` statement is not needed, so you can write `AddOptionButton Range("F15")` in the last line. Inarion 2 года назад 0

Похожие вопросы