使用vba将特定列从非活动工作表复制到一个Excel工作表

时间:2018-04-03 19:53:52

标签: excel vba excel-vba

我的Excel工作簿有以下表格:

  1. 概述 - 包含说明和按钮,可以导出有关组织中学生的数据。
  2. 9月入学 - 9月入学的学生详情
  3. Jan Intake - 1月份入学的学生详情
  4. May Intake - 5月入学的学生
  5. 第2页,第3页和第4页包含所有学术和个人信息。目标是只复制和创建一个只有列名称,学生ID和术语的Excel。 为此,有一个按钮放在工作表“概述”中,单击时会生成Excel工作表。

    以下是我用于宏的代码:

    Private Sub CommandButton1_Click()
    Dim t As Range
    Dim Ws1 As Worksheet
    Dim Ws As Worksheet
    Dim ts As String
    Dim nc As Integer
    Dim i As Range
    Dim j As Integer
    Dim LASTROW As Integer
    Dim k As Integer
    Dim wb As Workbook
    Dim valuessheet As Worksheet
    
    Set Ws1 = Sheets(CStr(ActiveSheet.Range("D3").Value)) 'change control from Overview to Jan Intake
    Ws1.Activate
    Set Ws = ActiveSheet
    Set valuesheet = ThisWorkbook.Sheets("Ref") 'Ref is a hidden sheet that consists the required column name listed in range K3 to K5
    
    Set wb = Workbooks.Add
    ts = wb.ActiveSheet.Name
    nc = 2
    j = 3
    
    For Each i In valuesheet.Range("K3:K5").Cells 'Change range
        Set t = Ws.Range("A3:X50").Find(What:=i.Value, lookat:=xlWhole, LookIn:=xlValues, _
                    MatchCase:=False)
        If Not t Is Nothing Then
        Columns(t.Column).Copy _
          Destination:=Sheets(ts).Cells(1, nc)
          nc = nc + 1
       Else:    MsgBox "Title Not Found"
       End If
    Next i    
    End Sub
    

    我正确地获得了 t 的值,但宏不断将工作表概述的列复制到新工作簿。 我该如何纠正?

1 个答案:

答案 0 :(得分:2)

始终记得使用它的工作表和/或工作簿限定任何Range()对象。正如评论中所述:

你有Column(t.Column).Copy。没有给出工作表,所以它使用的是活动表格。

您想要执行Ws.Column(t.Column).Copy之类的操作。

同样,当您粘贴到Sheets(ts)时,没有提到工作簿,因此您需要确保首先添加新工作簿的引用,即wb.Sheets(ts)...

相关问题