繁体   English   中英

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

[英]How to select a range of rows using two variables in VBA

我是VBA的新手,正在尝试编写宏以将特定数据从同一目录中的所有工作簿提取到主工作簿中。 尝试使用变量选择数据范围时遇到麻烦,因此我可以将数据复制并粘贴到主工作簿中。 我一直在观看视频并通过论坛阅读,但似乎无法使宏正常工作。

我有一个Excel工作表,该工作表在A列中列出了雇员,并在B,C,D,E和F列中(随后的行中)列出了我要复制的所有有关雇员的数据。 因此,例如,第1行包含单元格A1中的第一个雇员,然后第2行至第5行包含B至F列中的数据。第6行包含单元格A6中的下一个雇员姓名,有关他们的数据位于第7行至第6行中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

知道我在做什么错吗,还是有人可以想到更好的方法? 另外,请让我知道是否需要提供进一步的信息。

在此先感谢您的帮助。

您的代码可以如下重写。 避免在代码中使用“选择”。 检查此链接以了解原因。

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM