Используя Stop
и F8 , вы можете быстро определить, что ошибка в этой строке:
.Left = ActiveSheet.Range(myRange).Left
Причина этого в том, что ActiveSheet.Range(myRange)
недействительно -Range
принимает либо два Range
объекта, или один текстовый адрес в формате A1. Поскольку myRange
является Range
объектом, вы предоставляете ему ни один из них.
Однако, поскольку myRange
является Range
объектом, вы можете просто сделать это вместо этого:
.Left = myRange.Left
(Не забудьте сделать то же самое для Top
, Width
и Height
тоже!)
(Конечно, если ячейка myRange
содержиттекст, который является ссылкой на ячейку, такой как ячейка A1, содержащая текст «B3», тогда код не будет ошибаться - , но , это поместит изображение в неправильную ячейку, B3 вместо A1)
Что касается вашей другой проблемы: myRange
будет зависать как Nothing
, если ничего не выбрано. Если Selection
не является Range
- например, если у вас выбрано изображение - тогда вы получите другую ошибку (Несоответствие типов).
Возможно, вы захотите начать с этого Sub
:
If Selection Is Nothing Then
MsgBox "Nothing is selected!", vbCritical
Exit Sub
ElseIf TypeName(Selection) <> "Range" Then
MsgBox "Please select a cell!", vbCritical
Exit Sub
End If