2016-10-10 9 views
1

Я пытался исправить эту проблему некоторое время. Следующий код вставляет изображение из вашего выбора в мой документ excel. Он помещает изображение в ячейку B10 и изменяет его размер до высоты одной из моих объединенных ячеек. Теперь проблема в том, что я не могу получить ее centerd.Изображение VBA Center в объединенных ячейках

.Left = 35# 

С линии выше, я могу вручную центрировать одну картину, но я хочу, чтобы все другие изображения с другой шириной, чтобы быть centerd, а также. Может ли кто-нибудь помочь мне с этой проблемой? Код ниже - это то, что я использовал. Заранее спасибо!

Sub Insert_Pic_Section_One() 

Dim fileName1 As Variant 

fileName1 = Application.GetOpenFilename(filefilter:="Tiff Files(*.tif;*.tiff),*.tif;*.tiff,JPEG Files (*.jpg;*.jpeg;*.jfif;*.jpe),*.jpg;*.jpeg;*.jfif;*.jpe,Bitmap Files(*.bmp),*.bmp", FilterIndex:=2, Title:="Choose picture", MultiSelect:=False) 

If fileName1 = False Then 
Exit Sub 
Else 
ActiveWorkbook.ActiveSheet.Select 
Range("B10").Select 
Dim picture1 As Object 
Set picture1 = ActiveWorkbook.ActiveSheet.Pictures.Insert(fileName1) 

    With picture1 
    .Top = .Top 
    .Left = 35# 
    .Width = .Width 
    .Height = 233# 
    End With 

End If 

End Sub 
+1

центр по отношению к чему? Как вы придумали 35? Похоже, какая-то арифметика для каждой картины должна это делать. – arcadeprecinct

ответ

0

Не нужно ничего выбирать. Поскольку вы используете объединенную ячейку, вам нужно использовать .MergeArea, иначе она даст вам только высоту и ширину несвязанной строки и столбца.

Dim ws As Worksheet 
Dim targetCell As Range 
Dim picture1 As Picture 

Set ws = ActiveSheet 'replace with actual worksheet if possible 
Set targetCell = ws.Range("B10") 
Set picture1 = ws.Pictures.Insert(fileName1) 

With picture1 
    .Height = targetCell.MergeArea.Height 'set height first because width will change 
    .Top = targetCell.Top 
    .Left = targetCell.Left + (targetCell.MergeArea.Width - .Width)/2 
End With 
+0

Спасибо большое, Это сработало! –

+0

@SjoerdEeman, тогда вы могли бы принять ответ;) – arcadeprecinct