Можно ли начать диапазон со слова заголовка столбца? - PullRequest
0 голосов
/ 26 марта 2019

У меня есть несколько таблиц, которые в основном расположены друг на друге и имеют столбцы шагов, все в столбце А. Итак, первая таблица запускает шаги (заголовок столбца), затем идет на 1 - n (что угодно) под ней, и у меня есть кнопка рядом с нейэто добавляет строки прямо под этой таблицей.Затем пропускаются несколько строк, и у меня есть еще одна похожая таблица, которая имеет заголовок столбца STEPS1 и перечисляет ниже номер шага с другой кнопкой для добавления строк.У меня есть код, который будет окрашивать определенные ячейки в таблице в зависимости от того, какой шаг # строки, хотя, когда я добавляю несколько строк, мой определенный диапазон для окрашивания ячеек расширяется и начинает окрашивать ячейки, которые я не хочу окрашивать.Итак, я могу определить диапазон, который начинается с заголовка столбца, а не скажем, For all c in Range("A23:A32")

Вот некоторый код:

Dim C As Range
For Each C In Range("A22:A38")
            If C = 1 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B12").Interior.Color 'whatever colour you need
            ElseIf C = 2 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B13").Interior.Color
            ElseIf C = 3 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B14").Interior.Color
            ElseIf C = 4 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B15").Interior.Color
            ElseIf C = 5 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B16").Interior.Color
            ElseIf C = 6 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B17").Interior.Color
            ElseIf C = 7 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B18").Interior.Color
            ElseIf C = 8 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B19").Interior.Color
            ElseIf C = 9 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B20").Interior.Color
            ElseIf C = 10 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B21").Interior.Color
            ElseIf C = 11 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B22").Interior.Color
            ElseIf C = 12 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B23").Interior.Color
            ElseIf C = 13 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B24").Interior.Color
            ElseIf C = 14 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B25").Interior.Color
            ElseIf C = 15 Then
                Union(Cells(C.row, 2), Cells(C.row, 5), Cells(C.row, 8), Cells(C.row, 11), Cells(C.row, 14)).Interior.Color = Range("B26").Interior.Color
            End If
        Next C
        Loop

Моя проблема в том, что если я добавлю кучустрок для каждой таблицы, диапазон, который я установил, теперь не охватывает всю таблицу, скажем.Я хочу диапазон, который может найти заголовок столбца, например STEP1 или STEP2, и идти до тех пор, пока не будет пустой строки

1 Ответ

0 голосов
/ 27 марта 2019

Прочтите это и посмотрите, полезно ли это. Вы бы назвали эту подпрограмму с именем вашего заголовка в столбце A.

Sub ScanAndColor(tblName As String)

    Dim row As Integer
    row = 1

    'scan down until you find tblName, this is like "STEPS" or "STEPS1" or whatever
    Do While Cells(row, 1).Text <> tblName

        'just read the next row
        row = row + 1

        'since we're letting someone else tell us what value to stop at, maybe we should add some infinite loop protection
        If row = 1000 Then GoTo EscapeHatch
    Loop

    'push down one column to start reading just under the headers
    row = row + 1

    'scan down through the table until we hit some whitespace
    Do While Cells(row, 1).Text <> ""

        'in each iteration, grab every 3rd column from col 2 and assign it a color
        '  according to the code in the first cell.
        For col = 2 To 14 Step 3
            Cells(row, col).Interior.Color = Cells(Cells(row, 1) + 15, 2).Interior.Color

        Next col

        'increment the row
        row = row + 1
    Loop

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