簡體   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