2015-01-23 4 views
0
Sub ExampleUsage() 
    Dim myPicture As String, myRange As Range 
    myPicture = Application.GetOpenFilename _ 
     ("Pictures (*.gif; *.jpg; *.bmp; *.tif),*.gif; *.jpg; *.bmp; *.tif", _ 
     , "Select Picture to Import") 

    Set myRange = Selection 
    InsertAndSizePic myRange, myPicture 
End Sub 

Sub InsertAndSizePic(Target As Range, PicPath As String) 
    Dim p As Object 
    Application.ScreenUpdating = False 
    Set p = ActiveSheet.Pictures.Insert(PicPath) 

    If Target.Cells.Count = 1 Then Set Target = Target.MergeArea 
    With Target 
     p.Top = .Top 
     p.Left = .Left 
     p.Width = .Width 
     p.Height = .Height 
    End With 
End Sub 

Это мой код для Microsoft Excel. Я хочу разблокировать соотношение сторон, чтобы я мог заполнить всю объединенную ячейку. Заранее спасибо.Как установить соотношение сторон изображения?

+0

FYI его не мой код. , , я заимствовал его. Я не хочу брать кредит –

ответ

0

Вот как вы установите Соотношение сторон.
Это НедвижимостьФорма Объект. p от Picture Object Type. Вы можете использовать это имя для доступа к нему через Shapes, который имеет Aspect Ratio свойство:

Sub InsertAndSizePic(Target As Range, PicPath As String) 
    Dim p As Object 
    Application.ScreenUpdating = False 
    Dim sh As Worksheet: Set sh = ActiveSheet 
    Set p = sh.Pictures.Insert(PicPath) 
    sh.Shapes(p.Name).LockAspectRatio = False 

    If Target.Cells.Count = 1 Then Set Target = Target.MergeArea 
    With Target 
     p.Top = .Top 
     p.Left = .Left 
     p.Width = .Width 
     p.Height = .Height 
    End With 
    Application.ScreenUpdating = True 
End Sub 

Я объявил и установить переменную для Worksheet Object просто иметь Intellisense удар, чтобы получить аргументы.

Другой способ - использовать Shape Object AddPicture Method, как показано ниже.

Sub InsertAndSizePic(Target As Range, PicPath As String) 
    Dim s As Shape 
    Application.ScreenUpdating = False 
    Dim sh As Worksheet: Set sh = ActiveSheet 

    If Target.Cells.Count = 1 Then Set Target = Target.MergeArea 
    With Target 
     Set s = sh.Shapes.AddPicture(PicPath, True, True, .Left, .Top, .Width, .Height) 
    End With 
    Application.ScreenUpdating = True 
End Sub 

Этот код также выполняет то, что делает первый код. НТН.

+0

Спасибо за помощь, которая отлично работает. Я не знаю и не понимаю код. Это делает мою работу намного легче, я работаю с excel каждый день. –

+0

@ DallasBarney Рад это сделал. Кстати, см. [Принятие ответов] (http://stackoverflow.com/help/someone-answers) как один из способов сказать ** спасибо ** в SO. Вы также можете [проверить это] (http://stackoverflow.com/questions/10714251/how-to-avoid-using-select-in-excel-vba-macros), чтобы узнать больше о кодировании. Программирование Excel объектно ориентировано, поэтому, если у вас есть фон на любом языке программирования, это будет не так сложно. – L42

Смежные вопросы