【发布时间】:2019-03-17 13:00:59
【问题描述】:
一位客户要求我们通过将数据从 excel 行复制并粘贴到他们指定的模板(也在 excel 中)来生成报告。这对于他们提供的提取数据中的所有条目都是必需的。
所以循环是:
- 打开工作簿 B 的空白副本
- 从工作簿 A(代码所在的位置)复制数据
- 将数据粘贴到工作簿 B 中的指定单元格中
- 使用单元格 A1 作为文件名保存工作簿 B
- 关闭工作簿 B
- 进入工作簿 A 的下一行并重复。
这是我目前写的,显然它甚至没有接近我想要它做的,但到目前为止我所做的研究只是让我更加困惑!
(请原谅中间的“工作表名称”等,我曾尝试在此处使用我以前的代码部分,但我意识到它不会工作到一半)
Sub Transfer()
Dim x As Workbook
Dim y As Workbook
Dim strpath As String
Dim strfolderpath As String
Dim z As Integer
Application.ScreenUpdating = False
'## Open both workbooks first:
Set x = Workbooks.Open("c:\desktop\client data\export.xls")
Set y = Workbooks.Open("c:\desktop\client data\output template.xls")
' Set numrows = number of rows of data.
NumRows = Range("A1", Range("A1").End(xlDown)).Rows.Count
' Select cell a1.
Range("A1").Select
' Set loop
For z = 1 To NumRows
'copy data from x:
x.Sheets("name of copying sheet").Range("E6").Copy
'paste to y worksheet:
y.Sheets("sheetname").Range("C1").PasteSpecial
'copy data from x:
x.Sheets("name of copying sheet").Range("E7").Copy
'paste to y worksheet:
y.Sheets("sheetname").Range("F7").PasteSpecial
'copy data from x:
x.Sheets("name of copying sheet").Range("E8").Copy
'paste to y worksheet:
y.Sheets("sheetname").Range("A1").PasteSpecial
'save new worksheet
' Save filename based on cell value
strfolderpath = "C:\"
strpath = strfolderpath & _
y.Sheets("").Range("A1").Value & " Report" & ".xlsx"
ActiveWorkbook.SaveAs Filename:=strpath
' Selects cell down 1 row.
ActiveCell.Offset(1, 0).Select
Next
Application.ScreenUpdating = True
End Sub
我期待在您的帮助下扩展我的 VBA 知识。
问候,
马修
【问题讨论】:
-
由于您正在复制单个单元格,因此您可以从不复制粘贴而是分配开始。 IE。 Sheet1.Range("A1").value = Sheet2.Range("A1").value
-
那么结果有什么问题?
-
另外,请确认,您拥有的是三个工作簿,一个有 vba 代码,另一个有源数据,第三个应该有目标数据
-
另外,你的循环没有做预期的事情,计数器 z 没有在任何地方使用
-
@SNicolaou 谢谢你的指点,这肯定有助于收拾中间的混乱。第二点,我想不需要额外的工作簿来托管代码,我可以轻松地将其托管在数据来自的工作簿中。一个有趣的视线。