如何在vba中从表头遍历列

如何在vba中从表头遍历列,vba,Vba,我是VBA新手,我已经编写了一段代码来突出显示excel文件中的一些内容。但我有一个问题,我想在vba中从表头遍历列,但我不能这样做,因为我的列号将来可能会更改。请帮忙 下面是我的代码- 谢谢大家! Sub LoopThroughRows() Application.EnableCancelKey = xlDisabled Dim k As Long, lastrow As Long, lastCol As Long, i As Integer, j As Integer, C

我是VBA新手,我已经编写了一段代码来突出显示excel文件中的一些内容。但我有一个问题,我想在vba中从表头遍历列,但我不能这样做,因为我的列号将来可能会更改。请帮忙

下面是我的代码-

谢谢大家!

Sub LoopThroughRows()

    Application.EnableCancelKey = xlDisabled
    Dim k As Long, lastrow As Long, lastCol As Long, i As Integer, j As Integer, CurrentYear As String, TableHeader As String, CurrentQuarter As String, TargetYear As String, TargetQuarter As String
    lastCol = Range("AA1").End(xlToRight).Column

    With Worksheets("Sheet1")
        lastrow = .Cells(.Rows.Count, "A").End(xlUp).Row
    End With

    Application.ScreenUpdating = False

    For j = 2 To lastrow                              'Starting the loop from the 2nd row
        For i = 27 To lastCol                         ' Starting the loop from the 27th column AA1
            With Worksheets("Sheet1")
                If .Cells(j, i).Value > 0 Then
                    TableHeader = Cells(1, i).Text
                    Exit For
                End If
            End With
        Next                                          'Loop to traverse columns ends if the condition is met

        CurrentYear = Right(Cells(1, i), 2)           ' Extracting the last 2 characters
        CurrentQuarter = Mid(Cells(1, i), 2, 1)       'Extracting the Quarter number 2nd character
        TargetYear = Right(Range("R" & j), 2)         'Extracting the last 2 characters
        TargetQuarter = Right(Range("Q" & j), 1)      'Extracting the quarter number
        Range("BX1" & j) = "Status"


        If Not IsNull(CurrentYear & TargetYear) Then
            If CurrentYear < TargetYear Then
                Range("A" & j).EntireRow.Interior.ColorIndex = 3
                Range("BX" & j) = "Early Start"
            ElseIf TargetYear = CurrentYear Then
                If CurrentQuarter < TargetQuarter Then
                    Range("A" & j).EntireRow.Interior.ColorIndex = 3
                    Range("BX" & j) = "Early Start"
                End If
            End If

        End If

        If Not IsNull(CurrentYear & TargetYear) Then
            If CurrentYear > TargetYear Then
                Range("A" & j).EntireRow.Interior.ColorIndex = 6
                Range("BX" & j) = "Late Start"
            ElseIf TargetYear = CurrentYear Then
                If CurrentQuarter > TargetQuarter Then
                    Range("A" & j).EntireRow.Interior.ColorIndex = 6
                    Range("BX" & j) = "Late Start"
                End If
            End If

        End If

        If WorksheetFunction.Sum(Range("AA" & j & ":BW" & lastCol)) = 0 Then
            Range("A" & j).EntireRow.Interior.ColorIndex = 5
            Range("BX" & j) = "Not Started"
        End If
    Next                                              ' Moving on to next row
    Application.ScreenUpdating = True

End Sub
Sub-LoopThroughRows()
Application.EnableCancelKey=xlDisabled
Dim k为长,lastrow为长,lastCol为长,i为整数,j为整数,CurrentYear为字符串,TableHeader为字符串,CurrentQuarter为字符串,TargetYear为字符串,TargetQuarter为字符串
lastCol=范围(“AA1”)。结束(xlToRight)。列
带工作表(“表1”)
lastrow=.Cells(.Rows.Count,“A”).End(xlUp).Row
以
Application.ScreenUpdating=False
对于j=2至最后一行,从第二行开始循环
从第27列AA1开始循环
带工作表(“表1”)
如果.Cells(j,i).Value>0,则
TableHeader=单元格(1,i).文本
退出
如果结束
以
如果满足条件,“下一步”遍历列的循环将结束
CurrentYear=右(单元格(1,i),2)'提取最后2个字符
CurrentQuarter=Mid(单元格(1,i),2,1)'提取季度号第二个字符
TargetYear=Right(范围(“R”&j),2)”提取最后2个字符
TargetQuarter=右(范围(“Q”&j),1)'提取季度号
范围(“BX1”和j)=“状态”
如果不为null(CurrentYear&TargetYear),则
如果当前年份<目标年份,则
范围(“A”&j).EntireRow.Interior.ColorIndex=3
范围(“BX”和j)=“提前启动”
ElseIf TargetYear=当前年份
如果当前季度<目标季度,则
范围(“A”&j).EntireRow.Interior.ColorIndex=3
范围(“BX”和j)=“提前启动”
如果结束
如果结束
如果结束
如果不为null(CurrentYear&TargetYear),则
如果当前年份>目标年份,则
范围(“A”&j).EntireRow.Interior.ColorIndex=6
范围(“BX”和j)=“延迟启动”
ElseIf TargetYear=当前年份
如果CurrentQuarter>TargetQuarter,则
范围(“A”&j).EntireRow.Interior.ColorIndex=6
范围(“BX”和j)=“延迟启动”
如果结束
如果结束
如果结束
如果工作表function.Sum(范围(“AA”&j&“:BW”&lastCol))=0,则
范围(“A”&j).EntireRow.Interior.ColorIndex=5
范围(“BX”&j)=“未启动”
如果结束
“下一行”移动到下一行
Application.ScreenUpdating=True
端接头

尚未浏览您的代码,但您可以从
工作表对象范围(“TableName[HeaderCaption]”)中访问实际列

假设我在Sheet1中有一个表“Table1”(ListObject),其中
Dim oWS作为工作表;设置oWS=此工作簿。工作表(“Sheet1”)
,然后:

  • 标题地址可通过以下方式访问:
    oWS.Range(“表1[#标题]”)。地址
  • 特定标题的列:
    oWS.Range(“表1[MyHeader]”)。列

Ref:

所以该表只是正常范围而不是ListObject?它是ListObject