我有一个花名册文件,我想从中选择经理雇员数据(雇员姓名,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
,如果它能正常工作,我希望新工作簿中两个经理的数据看起来都像这样:
让我知道是否需要更多信息。
答案 0 :(得分:0)
您的错误是
Set Managers = .Range("A", .Range("A" & Rows.Count).End(xlUp))
将其更改为
Set Managers = .Range("A2", .Range("A" & Rows.Count).End(xlUp))