Excel 2016 VBA скопировать рисунок из листа и автоподбор в текстовом поле на другом листе - PullRequest
0 голосов
/ 22 октября 2018

У меня есть картинка «Рисунок 1» в левом верхнем углу листа «Логотип».Это пришло через другой макрос.Теперь я хотел бы, чтобы макрос скопировал «Рисунок 1» и вставил его в текстовое поле «TextboxLogo» на листе «Voorblad».Размер изображения должен автоматически увеличиваться до 90% от высоты текстового поля и центрироваться по центру как по вертикали, так и по горизонтали.

Это код, который я получил до сих пор:

Sub Macro1()
Dim picture As Shape

Sheets("Logo").Activate
picture = ActiveSheet.Shapes.Range(Array("Picture 1"))
Sheets("Voorblad").Visible = True
With Sheets("Voorblad").Shapes("TextBoxLogo").Fill
    .Visible = True
    .UserPicture picture
    .TextureTile = True
    .RotateWithObject = True
End With

End Sub

Мне нужноиспользуйте текстовое поле из-за изображения, перекрывающего все ячейки.

Когда я запускаю это, я получаю ошибку времени выполнения 91, переменная объекта или переменная блока не установлена.Я искал этот форум и Google, но безуспешно.

Надеюсь, мне повезет так

1 Ответ

0 голосов
/ 22 октября 2018
Dim picture As Shape

Shape - это тип объекта, picture - это переменная объекта.

picture = ActiveSheet.Shapes.Range(Array("Picture 1"))

Вы не можете назначить объектСсылка, как это.Что говорит вам ошибка времени выполнения, так это то, что отсутствует ключевое слово Set.

Set picture = ActiveSheet.Shapes.Range(Array("Picture 1"))

Это говорит о том, что вам не нужно делать Sheets("Logo").Activate.

Set picture = ActiveWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))

Или, если лист "Logo" существует во время компиляции в книге, в которой выполняется макрос, установите его свойство (Name), скажем, LogoSheet, и затем вы можете сделать это:

Set picture = LogoSheet.Shapes.Range(Array("Picture 1"))

Если он существует в книге, в которой выполняется макрос, но создается только во время выполнения, ActiveWorkbook также не требуется:

Set picture = ThisWorkbook.Worksheets("Logo").Shapes.Range(Array("Picture 1"))

Если форма Picture 1 - это отдельная фигура, материал .Range(Array(...)) является излишним, и это может быть все, что вам нужно (при условии, что для свойства (Name) этого листа установлено значение LogoSheet:

Set picture = LogoSheet.Shapes("Picture 1")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...