返回列表 上一主題 發帖

插入圖片時,等比例放大或縮小

建議增加宣告:
  1. Dim NewPicture as Object
複製代碼
  1. i = ThisWorkbook.Path & "\" & NewRef & ".jpg"
  2.     X = Dir(ThisWorkbook.Path & "\" & NewRef & ".jpg")
  3.     If X <> "" Then
  4.         Set Rngs = Range(Cells(61, 2), Cells(61, 19))
  5.         Set NewPicture = ActiveSheet.Pictures.Insert(i)
  6.         With NewPicture
  7.             .ShapeRange.LockAspectRatio = msoTrue
  8.             .Left = Rngs.Left
  9.             .Height = Rngs.Height
  10.             If .Width > Rng.Width Then
  11.                 .Width = Rng.Width
  12.                 .Top = Rngs.Top + (Rngs.Height - .Height) / 2
  13.             Else
  14.                 .Top = Rngs.Top
  15.             End If
  16.         End With
複製代碼

TOP

我是基於你的代碼修改, 未參與迴圈部份, 不曉得問題所在。

TOP

再看這一句 (因為等比例放大後的圖片寬度還是比儲存格範圍小) 後, 眼睛馬上@@, 腦裡??亂飛, 到底你要圖片剛填滿儲存格或圖自身長寬按相同比例盡量放入儲存格中?

TOP

由於衹是代碼片段修正案, 無法測試, 上次代碼中的Rngs, 欠了"s" 及沒有 End if, 此次一同修正。
  1. i = ThisWorkbook.Path & "\" & NewRef & ".jpg"
  2.     X = Dir(ThisWorkbook.Path & "\" & NewRef & ".jpg")
  3.     If X <> "" Then
  4.         Set Rngs = Range(Cells(61, 2), Cells(61, 19))
  5.         Set NewPicture = ActiveSheet.Pictures.Insert(i)
  6.         With NewPicture
  7.             .ShapeRange.LockAspectRatio = msoTrue
  8.             If .Height / .Width >= Rngs.Height / Rngs.Width Then
  9.                 .Height = Rngs.Height
  10.                 .Top = Rngs.Top
  11.                 .Left = (Rngs.Width - .Width) / 2 + Rngs.Left
  12.             Else
  13.                 .Width = Rngs.Width
  14.                 .Left = Rngs.Left
  15.                 .Top = (Rngs.Height - .Height) / 2 + Rngs.Top
  16.             End If
  17.         End With
  18.     End If
複製代碼

TOP

那是計算儲存格與圖片高寬比, 選出適合的高或寬作為圖片的基礎然後......

TOP

  1. i = ThisWorkbook.Path & "\" & NewRef & ".jpg"
  2.     X = Dir(ThisWorkbook.Path & "\" & NewRef & ".jpg")
  3.     If X <> "" Then
  4.         Set Rngs = Range(Cells(61, 2), Cells(61, 19))
  5.         Set NewPicture = ActiveSheet.Pictures.Insert(i)
  6.             xSize = .Height / .Width
  7.             If .Height / .Width >= Rngs.Height / Rngs.Width Then
  8.                 T = Rngs.Top
  9.                 L = (Rngs.Width - .Width) / 2 + Rngs.Left
  10.                 H = Rngs.Height
  11.                 W = H / xSize
  12.             Else
  13.                 T = (Rngs.Height - .Height) / 2 + Rngs.Top
  14.                 L = Rngs.Left
  15.                 W = Rngs.Width
  16.                 H = W * xSize
  17.             End If
  18.             .Delete
  19.         End With
  20.         Set NewPicture = ActiveSheet.Shapes.AddPicture(i, 1, 1, L, T, W, H)
  21.     End If
複製代碼

TOP

由於沒有圖片及附件做測試, 當中可能有Bug, 相信是第 9, 13 兩行的算法出問題。

TOP

修改以下一段試試, 但還是那一句, 沒有測試。
  1.     .ShapeRange.LockAspectRatio = msoTrue
  2.     xp = Rngs.Height / .Height
  3.     If .Height / .Width >= Rngs.Height / Rngs.Width Then
  4.         .Height = Rngs.Height
  5.         .Top = Rngs.Top
  6.         .Left = (Rngs.Width - .Width * xp) / 2 + Rngs.Left
  7.     Else
  8.         .Width = Rngs.Width
  9.         .Left = Rngs.Left
  10.         .Top = (Rngs.Height - .Height * xp) / 2 + Rngs.Top
  11.     End If
複製代碼

TOP

喜歡准大這一句, 讚
  1. With ActiveSheet.Shapes.AddPicture(i, False, True, rngs.Left, rngs.Top, True, True)
複製代碼

TOP

        靜思自在 : 是非當教育,讚美作警惕。
返回列表 上一主題