[英]Embed and resize image in Excel maintaining aspect ratio
我正在嘗試為 Excel 編寫一個 VBA 宏來嵌入和調整保持縱橫比的圖像的大小。 我想嵌入而不是鏈接,以便可以在計算機之間共享 Excel 文件。
我有 2 段代碼。
1st 將嵌入圖像(SaveWithDocument),定位圖像並更改高度(但不保持縱橫比)。
Sub Button7_Click()
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.ButtonName = "Submit"
.Title = "Select an image file"
.Filters.Clear
.Filters.Add "JPG", "*.JPG"
.Filters.Add "JPEG File Interchange Format", "*.JPEG"
.Filters.Add "Graphics Interchange Format", "*.GIF"
.Filters.Add "Portable Network Graphics", "*.PNG"
.Filters.Add "Tag Image File Format", "*.TIFF"
.Filters.Add "All Pictures", "*.*"
If .Show = -1 Then
Set pic = ActiveSheet.Shapes.AddPicture(.SelectedItems(1), _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoCTrue, _
Left:=1050, _
Top:=35, _
Width:=-1, _
Height:=150)
Else
MsgBox ("No picture inserted")
End If
End With
End Sub
2nd 將鏈接圖像,定位圖像並更改高度(保持縱橫比)。 此選項不會嵌入圖像。
Sub Button7_Click()
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.ButtonName = "Submit"
.Title = "Select an image file"
.Filters.Clear
.Filters.Add "JPG", "*.JPG"
.Filters.Add "JPEG File Interchange Format", "*.JPEG"
.Filters.Add "Graphics Interchange Format", "*.GIF"
.Filters.Add "Portable Network Graphics", "*.PNG"
.Filters.Add "Tag Image File Format", "*.TIFF"
.Filters.Add "All Pictures", "*.*"
If .Show = -1 Then
With ActiveSheet.Pictures.Insert(.SelectedItems(1))
.ShapeRange.lockaspectratio = msoTrue
.Left = 1050
.Top = 35
.Height = 150
End With
Else
MsgBox ("No picture inserted")
End If
End With
End Sub
雖然這兩段代碼單獨運行良好,但我無法將它們組合起來。 我知道“SaveWithDocument”不適用於“Pictures.Insert”,“LockAspectRatio”不適用於“Shapes.AddPicture”?
任何人都可以提供一些指導嗎?
非常感謝。
現在似乎已經解決了,並且運行良好。 非常感謝您的幫助。
Sub Button7_Click()
With Application.FileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.ButtonName = "Submit"
.Title = "Select an image file"
.Filters.Clear
.Filters.Add "JPG", "*.JPG"
.Filters.Add "JPEG File Interchange Format", "*.JPEG"
.Filters.Add "Graphics Interchange Format", "*.GIF"
.Filters.Add "Portable Network Graphics", "*.PNG"
.Filters.Add "Tag Image File Format", "*.TIFF"
.Filters.Add "All Pictures", "*.*"
If .Show = -1 Then
Dim pic As Shape
Set pic = ActiveSheet.Shapes.AddPicture(.SelectedItems(1), _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoCTrue, _
Left:=1050, _
Top:=35, _
Width:=-1, _
Height:=-1)
pic.lockaspectratio = msoTrue
pic.Height = 150
Else
MsgBox ("No picture inserted")
End If
End With
End Sub
如果您分兩步完成,我認為它會起作用,即以原始大小插入圖像並設置 LockAspectRatio,然后調整其大小。
Set pic = ActiveSheet.Shapes.AddPicture(.SelectedItems(1), _
LinkToFile:=msoFalse, _
SaveWithDocument:=msoCTrue, _
Left:=1050, _
Top:=35, _
Width:=-1, _
Height:=-1).LockAspectRatio = msoTrue
pic.Height = 150
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.