& Ldquo; CodeName & rdquo; для столбца таблицы Excel для использования в VBA

String a = new String("foo");
String b = new String("foo");
System.out.println(a == b); // prints false
System.out.println(a.equals(b)); // prints true

Убедитесь, что вы понимаете, почему. Это потому, что сравнение == сравнивает только ссылки; equals() метод сопоставляет содержимое по символу.

Когда вы вызываете new для a и b, каждый получает новую ссылку, указывающую на "foo" в таблице строк. Ссылки разные, но контент один и тот же.

-2
задан ivan_pozdeev 12 March 2019 в 09:46
поделиться

2 ответа

Комментарий

Комментарий в каждой ячейке заголовка ListObject остается там, если столбец переименован или переставлен.

Если (!) вы можете скрыть все комментарии по Application.DisplayCommentIndicator = xlNoIndicator (все комментарии не распознаются красным треугольником и не видны при наведении курсора), это может быть обходной путь:

Private Sub RecognizeColumnsOfListObject()
    Dim lo As ListObject
    Dim lc As ListColumn
    For Each lo In ActiveSheet.ListObjects
        For Each lc In lo.ListColumns
            Debug.Print lc.Index    ' not unique, always 1, 2, 3, ...
            Debug.Print lc.Name     ' not unique, changeable
            If Not lc.Range.Cells(1).Comment Is Nothing Then
                Debug.Print lc.Range.Cells(1).Comment.text ' unique
            End If
        Next lc
    Next lo
End Sub

Named Range

Если я присваиваю каждой ячейке заголовка a ListObject имя, она перемещается вместе со столбцом, если я переставляю ListObject. Поскольку его Name.Value или Name.RefersTo начинается с =<ListObjectName>..., я получаю абсолютный адрес следующим образом:

Dim n As Name
With <sheet_codename>
    For Each n In .Names
        Debug.Print .Range(Mid(n.RefersTo, 1)).Address
    Next n
End With
0
ответ дан Asger 12 March 2019 в 09:46
поделиться

При ближайшем рассмотрении, нет ничего плохого в создании заголовков таблиц Named Ranges. Это потому, что такие имена присваиваются структурированной ссылке, а не необработанному адресу ячейки, , поэтому они будут перемещаться вместе со столбцом!

names table entry

С другой стороны, это имя не печатается в поле адреса (по крайней мере, в Office 2007) при выборе заголовка, что довольно неудобно (потому что я не могу быстро найти имя, которое я должен набрать в код, чтобы получить этот столбец).

no range name shown

0
ответ дан ivan_pozdeev 12 March 2019 в 09:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: