返回列表 上一主題 發帖

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

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

請教插入圖片儲存格範圍時,如何等比例的在儲存格範圍內放大或縮小
以下程式碼為圖片大小符合儲存格,應如何修改呢?

    i = ThisWorkbook.Path & "\" & NewRef & ".jpg"
    X = Dir(ThisWorkbook.Path & "\" & NewRef & ".jpg")
       If X <> "" Then
          Set rngs = Range(Cells(61, 2), Cells(61, 19))
          ActiveSheet.Shapes.AddPicture i, True, True, rngs.Left, rngs.Top, rngs.Width, rngs.Height
       Else
      End If

謝謝~~

建議增加宣告:
  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

回復 2# ikboy


    感謝ikboy大大回覆,
    經測試後發現圖片有在儲存格內等比例放大,但似乎會停在10~15的這個迴圈出不來(因為等比例放大後的圖片寬度還是比儲存格範圍小),
    我試著在第13行插入Exit Sub,也沒有用,請問該如何修正?
    另外要加上什麼指令可以將等比例放大後的圖片在儲存格範圍內置中呢?
    謝謝~~

TOP

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

TOP

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

TOP

本帖最後由 takeshilin88 於 2020-9-29 15:21 編輯

回復 5# ikboy

ikboy大大您好:

是「圖自身長寬按相同比例盡量放入儲存格中」
您提供的指令有將圖片放大,但因為儲存格範圍比較寬,所以圖片還需要左右置中
謝謝

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

回復 7# ikboy


    感謝ikboy大大,
    已經成功了,
    請教這裡的If的判斷是依照什麼條件,有點不太理解?? 高 / 寬
    If .Height / .Width >= Rngs.Height / Rngs.Width Then

    感恩~~

TOP

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

TOP

回復 9# ikboy


    原來如此,又學到了一招,再次感謝~~

TOP

        靜思自在 : 唯其尊重自己的人,才更勇於縮小自己。
返回列表 上一主題