Как установить имя ячейки Excel с помощью VBA - PullRequest
1 голос
/ 17 февраля 2010

Мне нужно установить уникальное имя для ячейки, которая вызывает определенную пользовательскую функцию. поэтому я попытался установить имя в функции следующим образом

Dim r As Range
set r = Application.Caller

r.Name = "Unique"

Но это не работает. Пожалуйста, помогите

Спасибо

Ответы [ 4 ]

6 голосов
/ 17 февраля 2010

Следующий код устанавливает ячейку 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 ...

0 голосов
/ 26 июня 2019

Вы можете продолжить это Range("A1") = "Unique"

0 голосов
/ 24 мая 2019

Я использую этот саб, без формальной обработки ошибок:

Sub NameAdd()

    Dim rng As Range
    Dim nameString, rangeString, sheetString As String

    On Error Resume Next

    rangeString = "A5:B8"
    nameString = "My_Name"
    sheetString = "Sheet1"

    Set rng = Worksheets(sheetString).Range(rangeString)

    ThisWorkbook.Names.Add name:=nameString, RefersTo:=rng

End Sub

Чтобы удалить имя:

Sub NameDelete()
    Dim nm As name

    For Each nm In ActiveWorkbook.Names
        If nm.name = "My_Name" Then nm.Delete
   Next

End Sub
0 голосов
/ 11 мая 2019

Я использовал эту подпрограмму для прохождения через верхний ряд рабочего листа, и если в верхнем ряду есть значение, он устанавливает это значение как имя этой ячейки. Он основан на VBA, настолько грубоват и прост, но он делает свою работу !!

Private Sub SortForContactsOutlookImport()

    Dim ThisCell As Object
    Dim NextCell As Object
    Dim RangeName As String

    Set ThisCell = ActiveCell
    Set NextCell = ThisCell.Offset(0, 1)

    Do
        If ThisCell.Value <> "" Then
            RangeName = ThisCell.Value
            ActiveWorkbook.Names.Add Name:=RangeName, RefersTo:=ThisCell
            Set ThisCell = NextCell
            Set NextCell = ThisCell.Offset(0, 1)
        End If

    Loop Until ThisCell.Value = "Web Page"

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...