Ошибка кода при вставке изображения в диапазон с использованием Excel VBA - PullRequest
1 голос
/ 03 октября 2019

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

Ниже мой текущий код:

    Sub InsertImagetoRange()
    Dim ImageFile As Variant
    Dim ImageObject As Picture

    Dim myRange As Range
    With Application
    Set myRange = .Selection
    End With

    ImageFile = Application.GetOpenFilename(Title:="Select Picture To Be Imported")
    If ImageFile = False Then Exit Sub
        Set ImageObject = ActiveSheet.Pictures.Insert(ImageFile)
        With ImageObject
           .Left = ActiveSheet.Range(myRange).Left
           .Top = ActiveSheet.Range(myRange).Top
           .Width = ActiveSheet.Range(myRange).Width
           .Height = ActiveSheet.Range(myRange).Height
           .Placement = 1
           .PrintObject = True
        End With
    End Sub

В настоящее время над кодом вставьте изображение в нужное место, но выдает ошибкусразу после слов.

enter image description here

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

Любая помощь, указывающая мне правильное направление, очень ценится.

1 Ответ

0 голосов
/ 03 октября 2019

Используя 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...