将vba中范围的顶行设置为基于单元格值

将vba中范围的顶行设置为基于单元格值,vba,excel,range,Vba,Excel,Range,我是vba编码的新手,正在尝试在当前的工作中编写代码,将多个excel电子表格合并为一个(通过附加它们)。主要问题是,我需要从每个电子表格中复制的范围的行数和起始行数在不同的文件中有所不同 具体说明:我的每个数据集都有一个标题“Opportunity Name”,该标题位于a列中,通常可以在第17行中找到,但可能有所不同。我希望我的范围的最上面一行从Opportunity Name下面的那一行开始,因此我最好的猜测是尝试获取代码来搜索该值,找到行号+1,并可能将其存储为要在范围函数中使用的对象(

我是vba编码的新手,正在尝试在当前的工作中编写代码,将多个excel电子表格合并为一个(通过附加它们)。主要问题是,我需要从每个电子表格中复制的范围的行数和起始行数在不同的文件中有所不同

具体说明:我的每个数据集都有一个标题“Opportunity Name”,该标题位于a列中,通常可以在第17行中找到,但可能有所不同。我希望我的范围的最上面一行从Opportunity Name下面的那一行开始,因此我最好的猜测是尝试获取代码来搜索该值,找到行号+1,并可能将其存储为要在范围函数中使用的对象(下面示例中的第一行?)。但正如您在下面的代码中看到的,我能够运行的唯一范围语法每次都从A17开始。请帮我指出正确的方向,将A17变为变量,或者是否有更好的方法

For nfile = LBound(SelectedFiles) To UBound(SelectedFiles)
    FileName = SelectedFiles(nfile)
    Set wb = Workbooks.Open(FileName)
    LastRow = wb.Worksheets(1).Cells(Rows.Count, "A").End(xlUp).Row
    FirstRow = wb.Worksheets(1).Cells.Find("Opportunity Name").End(xlUp).Row
    Set SourceRange = wb.Worksheets(1).Range("**A17**:AB" & LastRow)
    Set DestRange = Sheet1.Range("A" & nrow)
    Set DestRange = DestRange.Resize(SourceRange.Rows.Count, SourceRange.Columns.Count)

    DestRange.Value = SourceRange.Value

    nrow = DestRange.Rows.Count + nrow

    wb.Close savechanges = False

Next nfile
谢谢

Thomas

当您查找
第一行时,您不需要
.End(xlUp).Row

...
FirstRow = wb.Worksheets(1).Cells.Find("Opportunity Name").Row + 1
Set SourceRange = wb.Worksheets(1).Range("A" & FirstRow & ":AB" & LastRow)
...
注意:您还可以添加错误检查,以确保找到“Opportunity Name”