【发布时间】:2019-01-21 11:16:56
【问题描述】:
我使用以下代码来组合多个工作表。问题是,此代码适用于在第一行有标题的工作表,而我的工作表没有。只能选择 3 列(A、F 和 G)。我的意思是工作表中的范围?工作表具有相同的结构,只是行数可能不同。任何的想法?谢谢!
Sub Combine()
Dim J As Integer
On Error Resume Next
Sheets(1).Select
Worksheets.Add ' add a sheet in first place
Sheets(1).Name = "Combined"
' copy headings
Sheets(2).Activate
Range("A1").EntireRow.Select
Selection.Copy Destination:=Sheets(1).Range("A1")
' work through sheets
For J = 2 To Sheets.Count ' from sheet 2 to last sheet
Sheets(J).Activate ' make the sheet active
Range("A1").Select
Selection.CurrentRegion.Select ' select all cells in this sheets
' select all lines except title
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select
' copy cells selected in the new sheet on last line
Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2)
Next
End Sub
【问题讨论】:
-
注意:删除
On Error Resume Next!它隐藏了 所有 错误消息,但错误仍然发生,您只是看不到它们。就像闭上眼睛一样。看不到的错误无法修复! • 您可能会受益于阅读How to avoid using Select in Excel VBA -
此外,您实际上在问什么也很不清楚。请更清楚,可能屏幕截图可能有助于解释您要做什么。
-
例如:我有 3 张工作表:A、B 和 C。工作表 A 在第 1 行和第 2 行之间有数据,B 在第 1 行和第 3 行之间,C 仅在第 1 行。数据列是 A, B....G.我只想在示例 6 行中创建另一个包含来自 A、B、C... 的数据的工作表(组合)。而且我只想复制新组合表中的 F 行和 G 行。
-
Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select这部分是你需要看的,目前所有的行都被选中。您还没有说每张纸的行号来自哪里,也没有展示您自己的尝试。也不需要任何选择。 -
@Nathan_Sav 事实上,我可以删除这一行,但什么也没有发生。我不知道行数,每张纸都有不同的数字。我的意思是,行数可能相差很大。使用上面的代码,“组合”文件仅包含每张纸的第一行,而不是所有行。知道如何解决这个问题吗?