Прозрачность вставленного изображения с копией Excel VBA

#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") , но получил ошибку несовместимого типа (возможно, неправильная ссылка). Было бы здорово узнать, как я мог бы встроить изображение из таблицы активов в форму.