Excel VBA для изменения размеров диапазонов, на которые ссылаются диапазоны объектов - PullRequest
0 голосов
/ 02 ноября 2018

I, что для установки диапазона в переменную для использования:

Private Sub Worksheet_Change(ByVal Target As Range)

Я хочу сослаться на ячейку, которая является 3 ячейками вершины определенного столбца объекта списка. таким образом:

set rOverlap = intersect(SRTbl.ListColumns(firstConceptColumn).DataBodyRange.iTem(1).offset(-3, 0).resize(0,3),target)

где firstconceptcolumn = 9 (или что угодно)

Это не сработает.

Я делаю это таким образом, потому что, если я когда-нибудь решу добавить столбцы в начале таблицы, код не должен быть chage. Первый ряд объекта списка - это не row1, а row5. Первые 5 строк запускают подпрограммы, когда значения изменяются (при вводе данных нажатие возвращает)

enter image description here

Я также пробовал использовать headerRowRange с:

Set rOverlap = Intersect(SRTbl.HeaderRowRange(firstConceptColumn).offsset(-3, 0).Resize(, 4), Target)

, который не будет работать ни.

На самом деле, как более фундаментальный вопрос, я думаю, что это за данные:

SRTbl.HeaderRowRange(firstConceptColumn)

Это диапазон? почему вы не можете использовать следующее:?

SRTbl.HeaderRowRange("name")

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

PS: Все, что я говорю о stackoverflow, - это изменение размера самого объекта. PS2: Я тоже не понимаю, есть ли разница между этими двумя парнями:

.Resize Range("A1:B10")

и

 .Resize(1,10) 

Хосе Ферро

1 Ответ

0 голосов
/ 02 ноября 2018

Вот один из способов:

Option Explicit
Public Sub test()
    Dim SRTbl As ListObject, header As Range, ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("Sheet2")
    Set SRTbl = ws.ListObjects(1)
    Set header = SRTbl.ListColumns("Name").Range(1, 1)
    Debug.Print header.Offset(-3).Resize(1, 2).Address

End Sub

Вот еще одно:

Option Explicit
Public Sub test()
    Dim SRTbl As ListObject, header As Range, ws As Worksheet

    Set ws = ThisWorkbook.Worksheets("Sheet2")   
    Set SRTbl = ws.ListObjects(1)
    Set header = SRTbl.HeaderRowRange.Find("Name")

    If Not header Is Nothing Then
        If header.Row > 3 Then
            header.Offset(-3) = "Tada"
        End If
    End If
End Sub

Для ссылки на всю ширину заголовка со смещением -3 строк:

SRTbl.HeaderRowRange.Offset(-3)

Чтобы просто изменить размер найденной ячейки:

header.Offset(-3).Resize(1,2) 

Чтобы изменить размер до конца таблицы из найденной ячейки

Debug.Print header.Resize(1, ws.Range(Split(SRTbl.HeaderRowRange.Address, ":")(1)).Column - header.Column + 1).Address
...