#excel #vba
Вопрос:
Мне нужно скопировать определенный диапазон и вставить диапазон в виде изображения (без границ excel по умолчанию).
ActiveSheet.Range(Cells(1, 1), Cells(10, 20)).Select
Selection.CopyPicture Appearance:=xlPrinter, Format:=xlPicture
ActiveSheet.Paste
With Selection
.Name = "My Pic"
.ShapeRange.Fill.Transparency = 0.5 '50% transparency
End with
Я также пробовал эту строку кода, но без какого-либо успеха.
ActiveSheet.Shapes("My Pic").Fill.Transparency = 0.5
Я могу изменить прозрачность фигур с помощью моего текущего кода, но не могу изменить прозрачность изображения с помощью VBA.
Хотя я могу изменить прозрачность изображения вручную, я не могу сделать это с помощью макроса VBA. Я также пытался записать макрос, но при изменении прозрачности вручную не записывается ни одна строка кода (странно?!).
Любые зацепки будут высоко оценены! 🙂
Ответ №1:
Очевидно, чтобы изменить прозрачность изображения с помощью VBA, вам нужно встроить его в форму, например, прямоугольник. Это работает:
Sub Macro1()
ActiveSheet.Shapes.AddShape(msoShapeRectangle, 63, 239, 269.5, 57).Select
With Selection.ShapeRange.Fill
.UserPicture PictureFile:="C:Usersuser1Picturesmy_pic.jpg"
.Visible = True
.Transparency = 0.5
End With
End Sub
Комментарии:
1. Я просматривал документацию Microsoft. Существует свойство
Shapes.PictureFormat
( docs.microsoft.com/en-us/office/vba/api/excel.pictureformat ). С помощью этого свойства можно управлять яркостью, контрастностью, прозрачностью и прозрачностью изображения. Но, к сожалению, нет способа контролировать процент прозрачности изображения.Shape.ShapeRange.Fill.Transparency = 0.5
изменяет прозрачность заполненного цвета, а не прозрачность изображения :/2. Точно, я тоже обнаружил, что даже запись макроса не будет записывать ту часть, где вы меняете прозрачность изображения. Но если вы вставите изображение в форму, как в примере, то прозрачность формы будет работать и для изображения, это сработало для меня. Это не самое чистое решение, но оно работает для управления прозрачностью изображения с помощью VBA.
3. Спасибо! Это отличный обходной путь для изменения прозрачности изображений с помощью VBA путем встраивания изображения в форму. Поскольку я не импортирую изображение из внешнего источника, строка кода
.UserPicture PictureFile:="C:Usersuser1Picturesmy_pic.jpg"
в моем случае не подходит. Я пытался.UserPicture ActiveSheet.Shapes("My Pic")
, но получил ошибку несовместимого типа (возможно, неправильная ссылка). Было бы здорово узнать, как я мог бы встроить изображение из таблицы активов в форму.