首页 > 解决方案 > 通过VBA中多列中的选择条件传输数据?

问题描述

我有一个花名册文件,我想从中选择经理员工数据(员工姓名、ID、薪水等),以转移到新的 Excel 工作簿并保存在他们的名下。经理姓名是 A 列。我只想选择一些数据传输到他们自己的工作簿,所以我制作了一个设置工作表,其中包含我想要的经理姓名在 A 列中。

代码:

    Sub Main()
      Dim Managers, Manager
      Dim Header As Range, Where As Range, This As Range
      Dim Wb As Workbook

      'Prepare
      Application.ScreenUpdating = False
      Application.DisplayAlerts = False

      'Refer to the headings
      Set Header = Range("A1").EntireRow
      'Refer to the data in column A
      Set Where = Range("A2", Range("A" & Rows.Count).End(xlUp))
      'Get the managers
      With Worksheets("Setup")
        Set Managers = .Range("A", .Range("A" & Rows.Count).End(xlUp))
      End With
      'Loop through
      For Each Manager In Managers
        'Find them
        Set This = FindAll(Where, Manager)
        If This Is Nothing Then GoTo Skip
        'Create a new file
        Set Wb = Workbooks.Add(XlWBATemplate.xlWBATWorksheet)
        With Wb
          With .Sheets(1)
            'Copy the header
            Header.Copy .Range("A1")
            'Copy the data
            This.EntireRow.Copy .Range("A2")
          End With
          'Save it
          .SaveAs ThisWorkbook.Path & Application.PathSeparator & Manager & "_Roster.xlsx", XlFileFormat.xlOpenXMLWorkbook
          .Close
        End With
        Skip:
            Next
            'Done
    End Sub

我在这一行不断收到应用程序定义的错误:

Set Managers = .Range("A", .Range("A" & Rows.Count).End(xlUp))

谁能帮我调试一下?

如果有人需要虚拟数据作为参考,您可以这样做:

在空白工作表中制作标题为(经理、员工、员工 ID、工资)

放入单元格(A2=manager 1,A3=manager 2,A4=manager 3,A5=manager 4),复制并粘贴这些,这样你就会得到一堆重复的块。

B2=employee 1 然后您可以向下拖动以将系列填充到 A 列中的最后一个单元格,并对 C 列和 D 列执行相同的操作。

像这样:https ://imgur.com/a/m423tor

然后,在 A1=manager 1 和 A2= manager 3 中标记一个新工作表“Setup”。这应该足以让您测试我提供的脚本。它应该引用设置表,只将数据从经理 1 拉到工作簿中,然后将经理 3 拉到工作簿中,而不接触经理 2 或 4 的数据。

像这样:https ://imgur.com/a/qlqCLMZ

如果它工作正常,我希望它对于新工作簿中的两个经理数据看起来像这样,并且看起来像这样:

https://imgur.com/a/4zfglUa

如果您需要更多信息,请告诉我。

标签: excelvba

解决方案


你的错误是

Set Managers = .Range("A", .Range("A" & Rows.Count).End(xlUp))

将其更改为

Set Managers = .Range("A2", .Range("A" & Rows.Count).End(xlUp))

推荐阅读