2013-05-02 19 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