1

我是 VBA 的新手,正在尝试编写一个宏来将同一目录中所有工作簿中的特定数据提取到主工作簿中。我在尝试使用变量选择一系列数据时遇到困难,以便我可以将数据复制并粘贴到主工作簿中。我一直在看视频和阅读论坛,但似乎无法让宏工作。

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

知道我做错了什么,或者有人能想到更好的方法吗?如果我需要提供进一步的上下文,请告诉我。

提前感谢您的帮助。

4

1 回答 1

0

您的代码可以重写如下。避免在代码中使用 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
于 2013-05-03T01:47:55.210 回答