【问题标题】:Copy specific columns from an inactive sheet to one excel sheet using vba使用 vba 将特定列从非活动工作表复制到一个 Excel 工作表
【发布时间】:2018-09-13 06:08:27
【问题描述】:

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

  1. 概述 - 由描述和一个按钮组成,该按钮应导出有关组织中学生的数据。
  2. Sep Intake - 9 月录取的学生详细信息
  3. Jan Intake - 一月份录取的学生详细信息
  4. May Intake - 5 月入学的学生

表 #2、#3 和 #4 包含所有学术和个人信息。目标是复制并创建一个仅包含名称、学生 ID 和学期列的 Excel。 为此,有一个按钮放置在工作表“Overview”中,单击时会生成 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 的值,但宏不断将工作表 Overview 的列复制到新工作簿。 我该如何纠正?

【问题讨论】:

  • 你有Column(t.Column).Copy。没有给出工作表,所以它使用的是活动表。你想做类似Ws.Column(t.Column).Copy 的事情。同样,当您粘贴到 Sheets(ts) 时,没有提到工作簿,因此您需要确保首先添加新工作簿的引用,即 wb.Sheets(ts)...
  • @BruceWayne:这行得通!谢谢...你能把它作为解决方案,以便我可以标记它。

标签: vba excel


【解决方案1】:

永远记得用它的工作表和/或工作簿来限定任何Range() 对象。如 cmets 所述:

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

你想做Ws.Column(t.Column).Copy之类的事情。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多