Следующий код устанавливает ячейку A1 с именем «MyUniqueName»:
Private Sub NameCell()
Dim rng As Range
Set rng = Range("A1")
rng.Name = "MyUniqueName"
End Sub
Это помогает?
EDIT
Я не уверен, как добиться того, что вам нужно, простым и элегантным способом. Я справился с этим взломом - посмотрите, поможет ли это, но вы, скорее всего, захотите дополнить мое решение.
Предположим, у меня есть следующая пользовательская функция в VBA, на которую я ссылаюсь на листе:
Public Function MyCustomCalc(Input1 As Integer, Input2 As Integer, Input3 As Integer) As Integer
MyCustomCalc = (Input1 + Input2) - Input3
End Function
Каждый раз, когда я вызываю эту функцию, я хочу, чтобы ячейке, которая вызывала эту функцию, было присвоено имя. Для этого, если вы перейдете к «ThisWorkbook» в своем проекте VBA и выберите событие «SheetChange», то вы можете добавить следующее:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If Left$(Target.Formula, 13) = "=MyCustomCalc" Then
Target.Name = "MyUniqueName"
End If
End Sub
Короче говоря, этот код проверяет, использует ли диапазон вызова пользовательскую функцию, а затем назначает диапазону имя (MyUniqueName) в этом случае.
Как я уже сказал, вышеупомянутое не очень хорошо, но оно может дать вам начало. Я не смог найти способ встроить код в пользовательскую функцию и установить имя диапазона напрямую, например. используя Application.Caller.Address
или Application.Caller.Cells(1,1)
и т. д. Я уверен, что есть способ, но я боюсь, что я немного ржавый на VBA ...