VBA 技能较弱的网站新手。希望我能在几天来一直在努力解决的问题上找到一些帮助。我发现了许多相似的例子,似乎无法将它们结合在一起。我正在使用 Excel 2007。我有一个“Summary_Reports”WB,以及由员工命名的其他几个工作簿(例如“Jim.xls”、“bob.xls”等)。每个员工工作簿都有一个命名范围“caps”,来自工作表“Tasks”。每个员工 wb 中的这个命名范围的宽度(列数)相同,但高度(行数)可能不同,并且某些行可能为空。尝试在“Summary_Reports”wb 中设置一个宏,该宏将打开每个员工 wb,复制命名范围“caps”,并仅在第一列中插入/粘贴该范围内包含数据的行,到“Summary_Reports”wb 中的“报告”表。我认为最简单的粘贴方法就是在顶部选择一个单元格并始终将这些行插入那里,这样每个员工就会从同一个位置开始插入到前一个员工的上方。这样就不会计算或寻找工作表上最后填充的行。起初我尝试打开“Jim.xls”并直接从工作簿中复制命名范围,但收效甚微,语法也遇到了很多麻烦。所以我最终得到了下面的代码,它将员工表拉到“Summery_Reports”中,然后从自身而不是另一个 wb 复制命名范围。最后可能会删除这些工作表。我认为最简单的粘贴方法就是在顶部选择一个单元格并始终将这些行插入那里,这样每个员工就会从同一个位置开始插入到前一个员工的上方。这样就不会计算或寻找工作表上最后填充的行。起初我尝试打开“Jim.xls”并直接从工作簿中复制命名范围,但收效甚微,语法也遇到了很多麻烦。所以我最终得到了下面的代码,它将员工表拉到“Summery_Reports”中,然后从自身而不是另一个 wb 复制命名范围。最后可能会删除这些工作表。我认为最简单的粘贴方法就是在顶部选择一个单元格并始终将这些行插入那里,这样每个员工就会从同一个位置开始插入到前一个员工的上方。这样就不会计算或寻找工作表上最后填充的行。起初我尝试打开“Jim.xls”并直接从工作簿中复制命名范围,但收效甚微,语法也遇到了很多麻烦。所以我最终得到了下面的代码,它将员工表拉到“Summery_Reports”中,然后从自身而不是另一个 wb 复制命名范围。最后可能会删除这些工作表。这样就不会计算或寻找工作表上最后填充的行。起初我尝试打开“Jim.xls”并直接从工作簿中复制命名范围,但收效甚微,语法也遇到了很多麻烦。所以我最终得到了下面的代码,它将员工表拉到“Summery_Reports”中,然后从自身而不是另一个 wb 复制命名范围。最后可能会删除这些工作表。这样就不会计算或寻找工作表上最后填充的行。起初我尝试打开“Jim.xls”并直接从工作簿中复制命名范围,但收效甚微,语法也遇到了很多麻烦。所以我最终得到了下面的代码,它将员工表拉到“Summery_Reports”中,然后从自身而不是另一个 wb 复制命名范围。最后可能会删除这些工作表。
我在下面开始的有点工作,但我知道的数据验证是不正确的。如果我错了,请纠正我,但它只是检查“大写”的左上角单元格;如果有内容,则粘贴所有“大写字母”,如果该单个单元格为空,则不粘贴任何内容。如何更正验证以检查每一行的第一列,以及如何让它只给我带有数据的行?
另外,我知道有一种更好的方法可以直接从每个员工 wb 获取“caps”数据,而无需先导入工作表。如果这可以轻松完成,我会对这方面的任何建议非常感兴趣。
如果您愿意帮助我,请尽可能地简化它,因为我真的很想知道代码的作用,而不仅仅是复制和粘贴。先感谢您。
Sub Import_Sheets()
Application.Workbooks.Open ("jim.xls")
Workbooks("jim.xls").Activate
Sheets("Tasks").Copy After:=Workbooks("Summary_Report.xlsm").Sheets("Report")
Application.Workbooks("Jim.xls").Close
'Go to newly copied sheet and name it.
ActiveSheet.Name = "jim"
'Copy the "caps" named range.
With Range("Caps")
If .Cells(1, 1).Value = "" Then
Else
Range("Caps").Select
Selection.Copy
Sheets("Report").Select
Range("B2").Select
Selection.Insert Shift:=xlDown
End If
End With
End Sub