Попробуйте следующий код, чтобы выбрать / скопировать форму выделения диапазона:
Dim ws As Worksheet, s As Shape, rng As Range, optB As OLEObject
Set ws = ActiveSheet
Set rng = sh.Range("your range containing the Option Button to be copied")
With ws
For Each s In .Shapes
If Not Intersect(Range(s.TopLeftCell.Address), Range(rng.Address)) Is Nothing Then
If s.Name = "OptionButton1" Then 'use here your option button name
s.Copy
Exit For
End If
End If
Next s
End With
rng.Cells(1, 1).Offset(0, 15).Select
ws.Paste
'Generic way of identifying the newly pasted Option button and allocate a `LinkedCell` to it:
'Set optB = ws.Shapes(ws.Shapes.Count).OLEFormat.Object
'optB.LinkedCell = "=" & rng.Cells(1, 1).Offset(0, 15).Address
Selection.LinkedCell = rng.Cells(1, 1).Offset(0, 15).Address
Для этого необходимо использовать трюк, но с использованием ActiveSheet.Shapes
... Использование rng.Cells.Offset(0, 15).Select
не мудро. Это выберет столько ячеек, сколько имеет диапазон. Я решил вставить его, ссылаясь на первую ячейку диапазона. Если вы хотите / нуждаетесь в другой позиции, вам будет легко адаптировать код (rng.Cells()
), я думаю.
Отредактировано: я адаптировал код для выбора и копирования только фигуры с именем "OptionButton1". Пожалуйста, позаботьтесь, чтобы использовать здесь свое реальное имя фигуры!
Я также показал способ присвоения LinkedCell
недавно созданной Option Button. Я должен признаться, что, глядя на ваш код, я не понял, на какую ячейку вы пытались связать. Я использовал один c один, тот же, что и для перемещения фигуры. Пожалуйста, используйте здесь соответствующий адрес, в соответствии с вашими потребностями.