#vba #excel
#vba #excel
Вопрос:
У меня есть таблица, созданная из списка данных. Как найти текст заголовка каждого столбца
Когда я выбираю заголовок activecell, он подсвечивается оранжевым цветом, но я хочу получить это значение с помощью Visual Basic. Я могу найти адрес листа Excel, но мне нужен заголовок столбца таблицы
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox Target.Value
MsgBox ActiveCell.Address
End Sub
Ответ №1:
Это вернет заголовок столбца, если переданная ячейка находится в таблице
Function TableHeader(cl As Range) As Variant
Dim lst As ListObject
Dim strHeading As String
Set lst = cl.ListObject
If Not lst Is Nothing Then
TableHeader = lst.HeaderRowRange.Cells(1, cl.Column - lst.Range.Column 1).Value
Else
TableHeader = ""
End If
End Function
Ответ №2:
strCurrentColName = Cells(ActiveCell.ListObject.Range.Row, ActiveCell.Column).Value
Ответ №3:
Если под заголовком столбца вы подразумеваете ячейку в первой строке того же столбца, в которую было внесено изменение, вы можете создать заголовок с использованием ячеек, т. е.
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
MsgBox Target.Value
MsgBox ActiveCell.Address amp; vbNewLine amp; "Column header is " amp; Cells(1, Target.Column)
End Sub
Если ваш заголовок был в строке 2, вы бы использовали Cells(2, ActiveCell.Column)
etc
[Обновлено после комментария ниже]
Private Sub Worksheet_Change(ByVal Target As Excel.Range)
Dim rng1 As Range
Set rng1 = Target.End(xlUp)
MsgBox "First value before a blank cell/top of sheet is " amp; rng1.Value
End Sub
Комментарии:
1. 1 сПасибо, это то, что я хочу, но если таблица находится в центре листа, это не сработает!!
2. Если ваша таблица непрерывна, вы можете использовать мой обновленный код выше, чтобы найти заголовок
3. Спасибо, но моя таблица не является непрерывной, но первое решение работает, поскольку я сделал так, чтобы моя таблица всегда отображалась сверху ;): D
4. Никаких проблем 🙂 Если есть способ определить верхнюю часть таблицы, то его можно легко адаптировать (т.Е. Найти и использовать определенное слово «Регион разработки», если оно всегда находится в верхнем левом углу, Используйте имя диапазона, чтобы «отметить» верхнюю часть таблицы и т. Д.)
Ответ №4:
Я искал в Интернете хороший способ найти значение заголовка любой заданной ячейки в таблице и после небольшого мозгового штурма придумал это рабочее решение, которым, как я думал, я поделюсь.
Target.Offset(1 - Target.Row).Value
Если ваши заголовки не находятся в строке 1, измените 1 на любую строку, в которой они оказались.