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

使用vba将特定列从非活动工作表复制到一个excel工作表,vba,excel,Vba,Excel,我的excel工作簿包含以下工作表: 概述-包括说明和一个按钮,用于导出组织中学生的相关数据 九月入学人数-九月入学的学生详细信息 1月入学人数-1月入学的学生详细信息 五月入学-五月入学的学生 第2、3和4页包括所有学术和个人信息。目标是复制并创建一个excel,其中只包含列名称、学生Id和术语。 为此,当单击生成excel工作表时,在工作表“概述””中会放置一个按钮 以下是我用于宏的代码: Private Sub CommandButton1_Click() Dim t As Range D

我的excel工作簿包含以下工作表:

  • 概述-包括说明和一个按钮,用于导出组织中学生的相关数据
  • 九月入学人数-九月入学的学生详细信息
  • 1月入学人数-1月入学的学生详细信息
  • 五月入学-五月入学的学生
  • 第2、3和4页包括所有学术和个人信息。目标是复制并创建一个excel,其中只包含列名称、学生Id和术语。 为此,当单击生成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的值,但宏一直将工作表概述的列复制到新工作簿中。
    如何更正此问题?

    请始终记住,使用任何
    范围()
    对象的工作表和/或工作簿对其进行限定。如评论中所述:

    您有
    列(t.Column)。请复制
    。没有给出工作表,所以它使用的是activesheet

    您需要执行类似于
    Ws.Column(t.Column).复制的操作


    类似地,当您仅粘贴到
    工作表(ts)
    时,没有提到任何工作簿,因此您需要确保首先添加新工作簿的引用,即
    wb.Sheets(ts).

    始终记住用其工作表和/或工作簿限定任何
    范围()
    对象。如评论中所述:

    您有
    列(t.Column)。请复制
    。没有给出工作表,所以它使用的是activesheet

    您需要执行类似于
    Ws.Column(t.Column).复制的操作


    类似地,当您仅粘贴到
    工作表(ts)
    时,没有提到任何工作簿,因此您需要确保首先添加新工作簿的引用,即
    wb.Sheets(ts).

    您有
    列(t.Column)。复制
    。没有给出工作表,所以它使用的是activesheet。您需要执行类似于
    Ws.Column(t.Column).复制的操作。同样,当您粘贴到仅
    工作表(ts)
    时,没有提及任何工作簿,因此您需要确保首先添加新工作簿的引用,即
    wb.Sheets(ts)…
    @BruceWayne:成功了!谢谢你…你能把它作为解决方案,这样我就可以标记它了。你有
    列(t.Column)。复制
    。没有给出工作表,所以它使用的是activesheet。您需要执行类似于
    Ws.Column(t.Column).复制的操作。同样,当您粘贴到仅
    工作表(ts)
    时,没有提及任何工作簿,因此您需要确保首先添加新工作簿的引用,即
    wb.Sheets(ts)…
    @BruceWayne:成功了!谢谢你…你能把它作为解决方案,这样我就可以标记它了。