這不是Excel不喜歡的切割部分 - 它是粘貼的部分。 Paste
和PasteSpecial
是您使用工作表對象(您正在粘貼到的位置)而不是圖像(您正在粘貼的對象)調用的方法。我不知道你是否想縮小寬度並保持高度不變,或者如果你想均勻地縮放兩個尺寸。如果要均勻地同時調整,試試這個:
Sub Macro6()
Dim p As Object
Dim iCnt As Integer
Dim s As Double
Dim r As Range
For Each p In ActiveSheet.Shapes
s = 214/p.Width
Set r = p.TopLeftCell
p.Width = 214
p.Height = p.Height * s
p.Cut
r.Select
ActiveSheet.PasteSpecial Format:="Picture (JPEG)", Link:=False
Application.CutCopyMode = False
iCnt = iCnt + 1
Next p
End Sub
如果你只是試圖縮小寬度和離開的高度相同,試試這個:
Sub Macro6()
Dim p As Object
Dim iCnt As Integer
Dim r As Range
For Each p In ActiveSheet.Shapes
Set r = p.TopLeftCell
p.Width = 214
p.Cut
r.Select
ActiveSheet.PasteSpecial Format:="Picture (JPEG)", Link:=False
Application.CutCopyMode = False
iCnt = iCnt + 1
Next p
End Sub
你的照片的位置如果他們原本就在一個單元的角落,應該保持完全一樣。否則,這將使圖像的左上角與最近的單元角對齊。粘貼後Application.CutCopyMode = False
是很好的做法。它告訴Excel擦除剪貼板並返回正常操作,而不是等待您再次粘貼。希望這可以幫助。
太棒了。謝謝您的幫助!!!!我實際上有一些橫向模式的圖片和其他肖像模式的圖片,我想縮小以適應現有的單元大小 - 所以我使用了您建議的For Each構造,並添加了if,then,else構造來確定圖片是否在縱向或橫向,並相應地重新調整比例(基於風景圖片的寬度或基於肖像的高度)。由於某些單元格有多個小圖片,因此我使用.top&.left屬性代替TopLeftCell。 – James 2014-08-31 22:35:13