如何在vba

时间:2018-04-06 20:42:01

标签: excel vba excel-vba

我正在尝试将所需的列从一个Excel电子表格复制到另一个。我想复制没有两个第一列标题的数据。我想要的标题名称保存在隐藏表格中,所有参考值都称为参考。所以我搜索所有标题并将整列复制到另一张表,然后分别删除前两行。有没有办法替代这个? 我使用的代码如下所示,供您参考。

Dim nCtr As Integer: nCtr = 3
 If FileExists(FilePath) = 0 Then
    MsgBox "No File Exists in the location. Please update and try again."
    LookupData_Copy = False
Else
    Set SrcWbook = Workbooks.Open(FilePath, True, True)
    Set SrcWsheet = SrcWbook.Sheets(targetSheet)
    Set ValueSheet = SrcWbook.Sheets("Ref")
    For Each jCTR In ValueSheet.Range("K3:K5").Cells 'Change range
     Set tCTR = SrcWsheet.Range("A3:X50").Find(What:=jCTR.Value, Lookat:=xlWhole, LookIn:=xlValues, _
                 MatchCase:=False)
     If Not tCTR Is Nothing Then
        SrcWsheet.Columns(tCTR.Column).Copy _
          Destination:=CurrentWorkbook.Sheets(targetSheet).Cells(1, nCtr)
        nCtr = nCtr + 1
        'MsgBox tCTR
    Else:    MsgBox "Title Not Found"
   End If
Next jCTR
SrcWbook.Close False


Sheets(targetSheet).Rows(1).EntireRow.Delete
Sheets(targetSheet).Rows(1).EntireRow.Delete

ETA - 我问这个问题的另一个原因是因为我想使用这段代码将更多数据附加到下一行。当我必须从中间删除标题时,代码变得非常复杂

2 个答案:

答案 0 :(得分:1)

以下内容(未经测试)可能只能将相关数据复制到新目的地。

我假设您的标题位于第1行和第2行。如果不是,请将3更改为第一行数据。

If Not tCTR Is Nothing Then
    With SrcWsheet
        .Range(.Cells(3, tCTR.Column), .Cells(.Rows.Count, tCTR.Column).End(xlUp)).Copy _
          Destination:=CurrentWorkbook.Sheets(targetSheet).Cells(1, nCtr)
        nCtr = nCtr + 1
    End With

答案 1 :(得分:0)

你也可以尝试这样的事情: LR用于定义SrcWsheet中表的最后一行,然后将数据从3行复制到最后一行(LR)

Dim LR as Long 
LR = SrcWsheet.Range("C2").CurrentRegion.Rows.Count
SrcWsheet.Range(Cells(3,tCTR.Column),Cells(LR,tCTR.Column).Copy 
CurrentWorkbook.Sheets(targetSheet).Cells(1, nCtr)