在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://i.stack.imgur.com/mXCus.jpg

然后,将新工作表标记为"设置",并在A1=经理1和A2=经理3中。这将使您能够测试我提供的脚本。它应该引用设置工作表,只将数据从经理1拉到工作簿,然后将经理3拉到工作簿中,而不接触经理2或4的数据。

像这样:https://i.stack.imgur.com/Qbv5v.jpg

如果它能正常工作,我希望在一个新的工作簿中,两位经理的数据都是这样的:

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

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

您的错误是

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

将其更改为

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

最新更新