2013-05-02 21 views
1

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

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

任何想法,我做错了什么,或者任何人能想到更好的办法吗?如果我需要提供进一步的背景,请让我知道。

在此先感谢您的帮助。

+0

您的Consultant1&2变量需要声明为Range的第一件事。其次,整个结构保持不变...即, A1中的名字后跟B2中的信息:F5? – Marshall 2013-05-02 19:55:47

+0

是的,整个结构保持不变。唯一改变的是每个员工的行数。因此,第一个员工姓名在A1中,该员工的信息是B2:F5(4行),员工2的姓名是A6,信息是B7:F9(2行),员工3的姓名是A10,信息B11 :F14(3行)等。一些员工只有一行或两行数据,其中一些数据的名称为40-50。 – Anthony 2013-05-02 20:25:35

+0

一旦您确定并选择了第一名员工的范围,下一步是什么?是否将它复制到主工作簿中的新工作表中?在相同的格式?新格式? – Eddie 2013-05-03 08:57:45

回答

0

您的代码可以重写如下。避免在代码中使用选择。检查这link知道为什么。

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 
+0

非常好,谢谢Santosh!这工作完美。 – Anthony 2013-05-03 16:12:32