#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