将Excel工作表合并为值

我正在使用一些代码(通过http://www.extendoffice.com/documents/excel/1184-excel-merge-multiple-worksheets-into-one.htmlfind)合并5张,每张1000行。

Sub Combine() Dim J As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).Name = "Combined" Sheets(2).Activate Range("A1").EntireRow.Select Selection.Copy Destination:=Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Range("A1").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Select Selection.Copy Destination:=Sheets(1).Range("A65536").End(xlUp)(2) Next End Sub 

这似乎是完美的工作,除了我需要使用“粘贴为值”的方法(因为我个人的工作表有许多公式,我只是想把它们作为文本版本)结合起来。

这个代码可以很容易地更改为“粘贴为值”?

谢谢。

 Sub Combine() Dim J As Integer On Error Resume Next Sheets(1).Select Worksheets.Add Sheets(1).name = "Combined" Sheets(2).Activate Range("A1").EntireRow.Select Selection.Copy Destination:=Sheets(1).Range("A1") For J = 2 To Sheets.Count Sheets(J).Activate Range("A1").Select Selection.CurrentRegion.Select Selection.Offset(1, 0).Resize(Selection.Rows.Count - 1).Copy Sheets(1).Range("A65536").End(xlUp)(2).PasteSpecial xlPasteValues Next End Sub 

这是否工作? 如果是这样,我们可以开始去除。 .select使这一点更“紧”。 我已经做了.Copy行(你能看到我做了什么?)

编辑:这几乎到达那里 – 我想你会在粘贴部分的问题,但我可以解决这个问题。 只要告诉我,在你的原始代码中,你所select的CurrentRegion是什么? 什么是试图复制/粘贴?

编辑2:好吧,我想我终于明白了。 问题是您使用Sheets(1)Sheets(2) 。 我不知道你的文件是怎么样的,但是下面的这些假设是有效的:你有“不变的”表单(这是你的神奇公式)。 只要有这个活动并运行下面的macros。

 Sub Combine() Dim J As Integer, noRows As Integer Dim ws1 As Worksheet, ws2 As Worksheet, magicWS As Worksheet ' Note, you need to have the worksheet where you do all of your formulas open and be the active sheet. Set magicWS = ActiveSheet Set ws1 = Sheets.Add(after:=magicWS) ws1.Name = "Combined" On Error Resume Next 'Now, I assume that your main (unchanging) worksheet is the FAR LEFT most 'Then, the second worksheet is the new "Combined". If you look along the bottom, every worksheet RIGHT of "Combined" will need 'to be added to this WS. 'First, let's get the headers from the third sheet: ws1.Cells.Rows(1).Value = Sheets(3).Cells.Rows(1).Value 'Now, let's add the data to "Combined"! For J = 3 To Sheets.Count noRows = Sheets(J).Range("A1").CurrentRegion.Rows.Count Sheets(J).Range("A1").CurrentRegion.Offset(1, 0).Resize(noRows - 1).Copy ws1.Range("A65536").End(xlUp)(2).PasteSpecial xlPasteValues Next J Application.CutCopyMode = False End Sub