2014-01-14 3 views
0

Как выбрать изображение внутри активной ячейки? Я пытаюсь сделать макрос, который вставляет изображение и изменяет его размер до размера ячейки. С некоторой помощью, я сделал следующий код, чтобы вставить изображение:Выберите изображение в активной ячейке

ActiveCell.Select 
Dim picname As String 
picname = ActiveCell.Value 
ActiveCell.Offset(-1, 0).Select 
ActiveSheet.Pictures.Insert "C:\Users\Briet\Documents\PAJ\pic-presentation\Images\" & picname & ".jpg" 

После того, как изображение вставлено, выбирается его контейнер ячейки, а не реальное изображение. Таким образом, следующий код, который изменяет изображение на камере не работает:

On Error GoTo NOT_SHAPE 
Dim PicWtoHRatio As Single 
Dim CellWtoHRatio As Single 
With Selection 
PicWtoHRatio = .Width/.Height 
End With 
With Selection.TopLeftCell 
CellWtoHRatio = .Width/.RowHeight 
End With 
Select Case PicWtoHRatio/CellWtoHRatio 
Case Is > 1 
With Selection 
.Width = .TopLeftCell.Width 
.Height = .Width/PicWtoHRatio 
End With 
Case Else 
With Selection 
.Height = .TopLeftCell.RowHeight 
.Width = .Height * PicWtoHRatio 
End With 
End Select 
With Selection 
.Top = .TopLeftCell.Top 
.Left = .TopLeftCell.Left 
End With 
Exit Sub 
NOT_SHAPE: 
MsgBox "Select a picture before running this macro." 

ответ

2

Insert() возвращает ссылку на вставленный снимок, поэтому вы можете напрямую работать с этим.

Sub Tester() 

Dim shp, rng As Range 

    Set rng = ActiveSheet.Range("C3") 

    Set shp = ActiveSheet.Pictures.Insert("C:\_Stuff\pic.jpg") 
    With shp 
     .Top = rng.Top 
     .Left = rng.Left 
     .ShapeRange.LockAspectRatio = msoTrue 
     .Width = .Width/Application.Max(.Width/rng.Width, _ 
              .Height/rng.Height) 
    End With 

End Sub 
+0

Я объявил shp и установил его равным вставленному изображению так же, как вы сказали, а затем просто использовал shp.Select, и все сработало. Спасибо! – bsapaka

+0

Я пробовал свой код, и я получаю ошибку времени выполнения в первой строке после с помощью shp – bsapaka

+0

Извините, я внес несколько изменений. Вы приняли ответ, поэтому я предполагаю, что он работает сейчас? –

0

Вы не можете настроить изображение, если у вас есть клетка выбрана. Вам нужно выбрать саму картинку. Согласно this question на SO, коллекция изображений недокументирована. Когда я искал ее, я тоже не мог ее найти. Я считаю, что после выбора ячейки вы можете получить объект изображения с the ShapeRange collection. Он имеет требуемый аргумент индекс, но если у вас только одна форма, это значение должно быть 1. Надеюсь, это указывает на то, что вы в правильном направлении.

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