【问题标题】:Define Range by Header VBA通过标题 VBA 定义范围
【发布时间】:2015-02-19 20:43:21
【问题描述】:

我在 VBA 中有一个范围定义,如下所示:

Sheet5.Range(Range("K2"), Sheet5.Range("K2").End(xlDown))

这可行,但如果我的报告布局发生变化,它将无法正常工作。我想知道是否可以根据列第一行的标题定义范围?对此问题的任何帮助将不胜感激!

【问题讨论】:

    标签: vba excel columnheader


    【解决方案1】:

    以下示例根据名称搜索标题。在示例中,它根据匹配为整个列 Red 着色,但您可以更改它。变量应该很容易理解,但请让我知道问题。

    Sub Color_Range_Based_On_Header()
        Dim rngHeaders As Range
        Dim rngHdrFound As Range
    
        Const ROW_HEADERS As Integer = 1
        Const HEADER_NAME As String = "Location"
    
        Set rngHeaders = Intersect(Worksheets("Sheet1").UsedRange, Worksheets("Sheet1").Rows(ROW_HEADERS))
        Set rngHdrFound = rngHeaders.Find(HEADER_NAME)
    
        If rngHdrFound Is Nothing Then
            'Do whatever you want if the header is missing
            Exit Sub
        End If
    
        Range(rngHdrFound, rngHdrFound.End(xlDown)).Interior.Color = vbRed
    
    End Sub
    

    【讨论】:

    • 为什么 HEADER_NAME 变量设置为“位置”?
    • 对不起,这只是一个文本名称。就我而言,我的代码搜索带有文本“位置”的标题。这应该更改为您的标题实际包含的任何内容,例如(“日期”、“姓名”、“部门”)。基本上,您当前在 Cell K1 中拥有的任何文本。
    • 很高兴听到。我在代码顶部使用了那些常量,以便我可以在必要时轻松更改
    • 如何将范围偏移 1 个单元格以使其不包含标题?
    • 在我发布的代码的最后一行(End Sub 行之前),您将其更改为:Range(rngHdrFound.Offset(1), rngHdrFound.End ...
    【解决方案2】:

    您可以使用任何您喜欢的名称来命名范围。在左上角,您可以看到所选范围的 id。如果您在其中键入名称,例如“Header_Cell”,您可以将代码更改为:

    Sheet5.Range(Range("Header_Cell"), Sheet5.Range("Header_Cell").End(xlDown))
    

    【讨论】:

    • 是的,我可以这样做,但如果我的报告布局发生变化,范围将会发生变化,这将不起作用。
    • 命名标题单元格的好主意,如果添加/删除列,代码仍然可以工作(+1)
    • 哦,我现在明白了。我只是在公式栏附近重命名它吗?
    猜你喜欢
    • 1970-01-01
    • 2011-04-10
    • 1970-01-01
    • 1970-01-01
    • 2018-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多