如何在VBA使用两个变量来选择行范围(How to select a range of rows u

2019-09-01 19:15发布

我是全新的,以VBA,我试图写一个宏来拉在同一个目录下的所有工作簿特定的数据到主簿。 尝试使用变量来选择数据的范围,这样我可以将数据复制并粘贴到主簿时,我被卡住。 我一直在看录像,并通过论坛读书,但似乎无法得到宏工作。

我有一个Excel工作表,该目录的员工在列A中,与所有我想复制有关在B,C,d,E,和F列中的雇员的数据(在随后的行)。 因此,例如,行1包含在单元格A1中第一个雇员,然后行2至5包含通过F.第6行包含在细胞A6下一雇员的名字在B柱中的数据,以及关于它们的数据通过位于行7 9(列BF)。 我要复制的行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

任何想法,我做错了,或者任何人能想到更好的办法吗? 也请让我知道如果我需要提供更详细的上下文。

在此先感谢您的帮助。

Answer 1:

您的代码可以重新写成如下。 避免在代码中使用选择。 检查此链接知道为什么。

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


文章来源: How to select a range of rows using two variables in VBA