如何在VBA中使用两个变量选择行范围

如何在VBA中使用两个变量选择行范围,vba,excel,range,Vba,Excel,Range,我是VBA新手,正在尝试编写一个宏,将同一目录下所有工作簿中的特定数据拉入主工作簿。当我试图使用变量选择一系列数据,以便将数据复制并粘贴到主工作簿中时,我陷入了困境。我一直在看视频,通过论坛阅读,但似乎无法让宏工作 我有一个Excel表格,在A列列出了员工,在B、C、D、E和F列(在随后的行中)列出了我想要复制的关于员工的所有数据。例如,第1行包含单元格A1中的第一名员工,第2行到第5行包含B列到F列中的数据。第6行包含单元格A6中的下一名员工的姓名,关于他们的数据位于第7行到第9行(B-F列)

我是VBA新手,正在尝试编写一个宏,将同一目录下所有工作簿中的特定数据拉入主工作簿。当我试图使用变量选择一系列数据,以便将数据复制并粘贴到主工作簿中时,我陷入了困境。我一直在看视频,通过论坛阅读,但似乎无法让宏工作

我有一个Excel表格,在A列列出了员工,在B、C、D、E和F列(在随后的行中)列出了我想要复制的关于员工的所有数据。例如,第1行包含单元格A1中的第一名员工,第2行到第5行包含B列到F列中的数据。第6行包含单元格A6中的下一名员工的姓名,关于他们的数据位于第7行到第9行(B-F列)。我想复制第2-5行并粘贴到主工作簿中,然后复制第7-9行并粘贴到主工作簿、第8-14行,依此类推

我的第一次尝试是将两个变量定义为整数。然后,我试图在A列中找到第一个员工的姓名,并选择后面的行,然后将第一个变量设置为该行。然后找到第二个员工的姓名,选择前面的行,并将变量2设置为该行。然后使用这两个变量选择范围。我的代码是这样的:

Sub SelectConsultantData()
Dim Consultant1 As Integer, Consultant2 As Integer
Dim ConsultantRange As Range

    Columns("A:A").Select
    Selection.Find(What:="Andrew", After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Consultant1 = Rows(ActiveCell.Row).Select
    Consultant1 = Consultant1 + 1
    Columns("A:A").Select
    Selection.Find(What:="Bob", After:=ActiveCell, LookIn:=xlValues, _
        LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
        MatchCase:=False, SearchFormat:=False).Activate
    Consultant2 = Rows(ActiveCell.Row).Select
    Consultant2 = Consultant2 - 1
    Set ConsultantRange = Range(Consultant1, Consultant2).Select

End Sub
知道我做错了什么吗,或者有人能想出更好的方法吗?另外,如果我需要提供进一步的背景,请让我知道


提前感谢您的帮助。

您的代码可以按如下方式重新编写。避免在代码中使用Select。检查此项以了解原因

Sub SelectConsultantData()
    Dim Consultant1 As Integer, Consultant2 As Integer
    Dim ConsultantRange As Range

    Dim rngFind As Range
    Set rngFind = Columns("A:A").Find(What:="Andrew", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If Not rngFind Is Nothing Then
        Consultant1 = rngFind.Row + 1
    End If

    Set rngFind = Columns("A:A").Find(What:="Bob", After:=Range("A1"), LookIn:=xlValues, LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext)

    If Not rngFind Is Nothing Then
        Consultant2 = rngFind.Row - 1
    End If

    If Consultant1 > 0 And Consultant2 > 0 Then
        Set ConsultantRange = Range(Cells(Consultant1, 2), Cells(Consultant2, 6))
    End If

End Sub

首先,Consultant1&2变量需要声明为范围。第二,结构是否始终保持不变。A1中的名称后接B2:F5中的信息?是,整个结构保持不变。唯一改变的是每个员工下的行数。因此,第一个员工姓名在A1中,该员工的信息在B2:F5(4行)中,员工2的姓名在A6中,信息在B7:F9(2行)中,员工3的姓名在A10中,信息在B11:F14(3行)中,等等。一些员工只有一行或两行数据,有些人的名字下有40-50个。一旦你确定并选择了第一个员工的范围,下一步是什么?是否要将其复制到主工作簿中的新工作表中?同样的格式?新格式?