通过选择标准在VBA中的多个列中传输数据?

时间:2018-07-13 14:05:32

标签: excel excel-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 =管理器1,A3 =管理器2,A4 =管理器3,A5 =管理器4),然后复制并粘贴,以便获得一堆重复的图块。

B2 =员工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

让我知道是否需要更多信息。

1 个答案:

答案 0 :(得分:0)

您的错误是

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

将其更改为

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