【发布时间】:2016-09-27 17:59:19
【问题描述】:
我有大量的 Excel 工作簿,其中包含 25 个以上的工作表,每个工作表包含 20 列数据,范围为 1:500(或在某些情况下为 1:1000)。我经常负责更新“模板”,在该模板上输入新数据以进行新计算。我希望能够轻松地将旧工作表中的现有数据粘贴到具有新格式的工作表中,同时在新模板中保留任何新的格式/公式。
我正在使用 VBA 打开要复制的工作表并将其粘贴到新的模板工作表上。到目前为止,我的代码将从要复制的工作簿的第一张工作表 (S1) 中复制所有内容并将其粘贴到目标工作簿的第一张工作表 (S1) 上。
我想扩展此过程以遍历所有活动工作表(对工作簿中的每个工作表执行现在正在执行的操作)。我以前可以使用不同的代码来执行此操作,但它删除了我在粘贴时需要的第 503 行和第 506 行中的公式。我可以做一个 pastespecial 并跳过空单元格吗?我是新来的。
这是我当前的代码:
Sub CopyWS1()
Dim x As Workbook
Dim y As Workbook
Set x = Workbooks("Ch00 Avoid.xlsx")
Set y = Workbooks("Ch00 Avoid1.xlsx")
Dim LastRow As Long
Dim NextRow As Long
x.Worksheets("S1").Activate
Range("A65536").Select
ActiveCell.End(xlUp).Select
LastRow = ActiveCell.Row
Range("A2:T" & LastRow).Copy y.Worksheets("s1").Range("A1:A500")
Application.CutCopyMode = False
Range("A1").Select
End Sub
我相信我需要使用类似以下代码的代码才能将其扩展到工作表,但我不确定如何遍历工作表,因为我在上面的代码中专门引用了两个工作表。
Sub WorksheetLoop2()
' Declare Current as a worksheet object variable.
Dim Current As Worksheet
' Loop through all of the worksheets in the active workbook.
For Each Current In Worksheets
' Insert your code here.
' This line displays the worksheet name in a message box.
MsgBox Current.Name
Next
End Sub
我想我也许可以将这个问题作为一个跨工作表索引的 for 循环来解决(创建一个新变量并运行一个 for 循环,直到我的索引为 25 或其他东西)作为替代方案,但同样,我是不知道如何将我的复制/粘贴从特定工作表指向另一张工作表。我对此非常陌生,仅对 Python/Java 有半有限的经验。这些 VBA 技能将使我在日常生活中受益匪浅。
有问题的两个文件: Ch00 Avoid
【问题讨论】:
-
“我不确定如何将我的复制/粘贴从特定工作表指向另一张工作表” --- 你为什么不试试
Sheets(i).Range("A2:T" & LastRow).Copy Sheets(j).Range("A1")其中 i 和 j 是您希望使用的工作表。 -
另外,避免使用
.Select可能会有所帮助,至少它会帮助您更好地了解如何处理数据。您还可以查找诸如“VBA 循环工作表”之类的内容 -
我完全迷路了。每次我修改我的代码远离上面的内容时,我都会失去我所拥有的功能。我可能应该指出,到目前为止我所获得的任何功能都是由于运气不佳和将其他人的代码大杂烩在一起。如果我添加 Sheets(i).Range("A2:T" & LastRow).Copy Sheets(j).Range("A1") 并指定我想要的范围(索引 1 到索引 25),什么也不会发生。我想连续激活我的第一个工作簿的每个工作表,从第 1-500 行和 A-T 列复制数据,并将该数据复制到新工作簿中相应的工作表中。
标签: vba excel macros copy-paste