К сожалению, вы не можете добиться этого с помощью функции, используемой в формуле ячейки. Вы можете погуглить «что можно и чего нельзя делать с udf в excel vba». Одна из вещей, которую вы не можете сделать, - это изменить размер ячеек, если вызывается из Excel (то есть как формула в ячейке). Это сработает, если вы вызовете функцию из vba. В коде вы можете определить, как функция вызывается через Application.Caller
, которая будет возвращать ссылку на ячейку, если вызывается из Excel.
Обход вашей проблемы заключается в использовании некоторых событий рабочего листа, таких как Worksheet_BeforeDoubleClick
. В этом случае вы должны ввести URL-адреса в желаемые ячейки и запустить процедуру, дважды щелкнув нужную ячейку. Попробуйте использовать такой код, как этот
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
Dim cl As Range
Set cl = Target
On Error Resume Next
If cl.Value <> "" Then
Dim pic As Picture
'Me.Pictures.Delete
Set pic = Me.Pictures.Insert(cl.Value)
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0
If Not pic Is Nothing Then
Cancel = True
With pic
.Left = cl.Left
.Top = cl.Top
cl.EntireColumn.ColumnWidth = 20
.Width = cl.Width
cl.EntireRow.RowHeight = .Height
End With
End If
End If
End Sub
Обратите внимание, что вам не нужно устанавливать высоту изображения, поскольку она будет автоматически изменена, поскольку соотношение сторон для изображений заблокировано (по умолчанию). Также обратите внимание, что .ColumnWidth
и .RowHeight
не обязательно имеют один и тот же блок (их нет на моем компьютере), поэтому вы должны быть осторожны с этим. Может быть, кто-то сможет пролить больше света на эту проблему .
Еще одна вещь, которую вам нужно иметь в виду, если вы выберете go с опцией функции, заключается в том, что каждый раз, когда функция пересчитывается, вы получите новое изображение, добавленное поверх того, что уже было добавлено, поэтому вам нужно найти способ избежать этого.