Изображение центра VBA в объединенных ячейках

#vba #excel #cells

#vba #excel #ячейки

Вопрос:

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

 .Left = 35# 
  

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

 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? Похоже, что некоторая арифметика для каждого изображения должна это сделать.

Ответ №1:

Не нужно ничего выбирать. Поскольку вы используете объединенную ячейку, которую вам необходимо использовать .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