Как я могу автоматизировать создание именованных ссылок в Excel? Я хочу, чтобы первое поле каждой строки было моей ссылкой - PullRequest
0 голосов
/ 09 марта 2009

Первый столбец моей электронной таблицы - это уникальный ключ (с точки зрения данных, ничего общего с Excel). Другой из моих столбцов содержит ссылки на другие строки (на уникальный ключ этой строки). Когда я вставляю эти гиперссылки, мне нужно указывать на «определенные имена», поскольку порядок строк со временем будет меняться.

Мне не нужно создавать определенное имя каждый раз, когда я вставляю новую строку. Есть ли способ автоматически определить текст столбца как «определенное имя»?

Надеюсь, это понятно.

Большое спасибо.

Ответы [ 2 ]

2 голосов
/ 10 марта 2009

Вам следует заглянуть в Workbook.Names или Worksheet.Names (если вы хотите ограничить указанное имя рабочим листом).

Примеры, показанные в ссылках выше, довольно хороши. В вашем случае вы хотели бы использовать Range.Value или Range.Text, найденный в ячейке, для использования в качестве строки, передаваемой в качестве аргумента «Имя» для метода Names.Add ().

При использовании VBA это может выглядеть примерно так:

ThisWorkbook.Names.Add _
    Name:=Sheet1.Range("A1").Text, _
    RefersTo:=Sheet1.Range("A:A"), _
    Visible:=True 

Выше указано, что определенное имя для столбца A будет значением (текстом), найденным в ячейке заголовка A1.

Надеюсь, это поможет!

Mike

0 голосов
/ 10 марта 2009

Понял. Майк Р. поставил меня на правильный путь. Спасибо.

Обратите внимание на необходимость удаления не буквенно-цифровых символов для имен. Кроме того, дублирование имени просто перезаписывает старую ссылку.

Private Sub Worksheet_Change(ByVal Target As Range)
    If (Target.Column = 1 And Target.Text <> "" And Target.Cells.Count = 1) Then
        ThisWorkbook.Names.Add _
            Name:=StripChar(Target.Text), _
            RefersTo:=Target, _
            Visible:=True
    End If
End Sub

Function StripChar(s As String) As String
    With CreateObject("vbscript.regexp")
        .Global = True
        .ignorecase = True
        .Pattern = "[^\dA-Z]"
        StripChar = .Replace(s, "")
    End With
End Function
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...