Excel 复制模板工作表并从另一个工作表中的数据表填充
我希望实现以下目标Excel 复制模板工作表并从另一个工作表中的数据表填充,excel,vba,Excel,Vba,我希望实现以下目标 使用模板(“AmortTemplate”)在同一工作簿中创建新工作表 创建新工作表(“AmortTemplate(2)”)后,从同一工作簿中现有工作表(“AssetInfo”)中的表填充此工作表中的特定字段 将新工作表(“AmortTemplate(2)”重命名为新工作表中特定字段的值,例如工作表中单元格G7中的“ABC 123 GP” 使用“AssetInfo”工作表中的参考表重复创建新工作表和填充字段,直到为参考表中的所有记录(行)创建工作表和填充字段 我已成功创建了如下
Sub Copy_Amort_Template()
'
' Copy_Amort_Template Macro
'
Sheets("AmortTemplate").Select
Sheets("AmortTemplate").Copy Before:=Sheets(2)
End Sub
Sub Insert_Asset_Info()
'
' Insert_Asset_Info Macro
'
Sheets("Amort Template (2)").Select
Range("G6").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[2]C[-4]"
Range("G7").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[1]C[-5]"
Range("G8").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!RC"
Range("G9").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-1]C[-3]"
Range("G10").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-2]C[-1]"
Range("G11").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-3]C[1]"
Range("G14").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-6]C[-2]"
Range("E15").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-7]C[8]"
Range("G15").Select
ActiveCell.FormulaR1C1 = "=AssetInfo!R[-7]C[5]"
Range("G7").Select
Selection.Copy
Sheets("Amort Template (2)").Select
Sheets("Amort Template (2)").Name = "ABC 123 GP"
End Sub
你不可能对你的问题给出一个完整的答案,但它可以在你的道路上帮助你 宏记录器可以提供帮助,但它是有限的。它记录了你在做什么。它产生语法正确的VBA,但不是好的VBA。例如,假设我单击一个单元格,输入一个值并按enter键,它将记录:
Range("A1").Select
ActiveCell.FormulaR1C1 = "5"
Range("A2").Select
没有一个程序员会打这样的字。他们会键入类似以下备选方案之一的内容:
Range("A1").Value = "5"
Cells(1, "A").Value = "5"
Cells(1, 1).Value = "5"
Cells(RowCrnt, ColCrnt) .Value = "5"
在前三条语句中,我使用了不同的方法指定单元格A1。在第四个示例中,我使用了一些变量,这些变量以前会设置为指定要更改的单元格所需的值
对于语法不确定的单个复杂语句,我使用宏记录器。例如,我发现宏记录器是获取复杂排序
或find
的代码的最佳方法,因为我使用这些语句的频率不足以记住它们的语法
宏记录器不会帮助您处理If
、Do
或For
语句。你必须自己编写代码
在尝试其他操作之前,您必须至少学习VBA的基础知识。您无法从宏录制器或在本网站或其他网站上找到的代码片段中学习VBA。搜索“Excel VBA教程”。有许多在线教程可供选择,因此请找到一个与您的学习风格相匹配的教程。我更喜欢书。我参观了一个很好的图书馆,复习了他们的Excel VBA入门,借了最有希望在家继续学习的书,然后买了一本我认为最好的书作为永久参考
您选择的教程或初级读物将教您有关变量、ifs、循环以及访问工作表和工作簿的知识。这可以为您提供足够的信息来编写宏。如果没有,请尝试搜索单个目标。例如,搜索“Excel VBA复制工作表”。这将带您到解释“工作表.复制方法(Excel)”的位置
不要使用相对单元格地址。在某些情况下,相对地址可能有用,但我不认为这是其中之一。有了相对地址,你可以很快忘记自己在哪里。如果您想在代码周围放置一个循环,这一点尤其正确
整理当前代码可以提供:
Worksheets("Amort Template").Copy Before:=Worksheets(2)
' Sheets("Amort Template (2)").Select ' Not necessary; the new worksheet is the active worksheet
With Worksheets("AssetInfo")
Range("G6").Value = .Cells(8, "C").Value
Range("G7").Value = .Cells(8, "B").Value
Range("G8").Value = .Cells(8, "G").Value
Range("G9").Value = .Cells(8, "D").Value
Range("G10").Value = .Cells(8, "F").Value
Range("G11").Value = .Cells(8, "H").Value
Range("G14").Value = .Cells(8, "E").Value
Range("E15").Value = .Cells(8, "M").Value
Range("G15").Value = .Cells(8, "L").Value
ActiveSheet.Name = .Cells(8, "B").Value
End With
我可能误解了一些相对地址,但我不这么认为
注:
范围(“G6”)。值
(无前导周期)指的是活动工作表.Cells(8,“C”).Value
(前导周期)指由With
语句标识的工作表范围(“C8”)
与单元格(8,“C”)
具有相同的含义。我选择了单元格
格式,原因很清楚For RowCrnt = 8 to RowLast
:
Next
您还需要将.Cells(8,“C”).Value替换为.Cells(RowCrnt,“C”).Value
。对所有其他.Cells(8,“X”).Value
s重复上述操作
如果搜索“Excel VBA查找最后一行”,您将找到许多网站,这些网站将告诉您如何设置RowLast
的值
我希望这会让你开始。不可能对你的问题给出一个完整的答案,但可以在路上帮助你
宏记录器可以提供帮助,但它是有限的。它记录了你在做什么。它产生语法正确的VBA,但不是好的VBA。例如,假设我单击一个单元格,输入一个值并按enter键,它将记录:
Range("A1").Select
ActiveCell.FormulaR1C1 = "5"
Range("A2").Select
没有一个程序员会打这样的字。他们会键入类似以下备选方案之一的内容:
Range("A1").Value = "5"
Cells(1, "A").Value = "5"
Cells(1, 1).Value = "5"
Cells(RowCrnt, ColCrnt) .Value = "5"
在前三条语句中,我使用了不同的方法指定单元格A1。在第四个示例中,我使用了一些变量,这些变量以前会设置为指定要更改的单元格所需的值
对于语法不确定的单个复杂语句,我使用宏记录器。例如,我发现宏记录器是获取复杂排序
或find
的代码的最佳方法,因为我使用这些语句的频率不足以记住它们的语法
宏记录器不会帮助您处理If
、Do
或For
语句。你必须自己编写代码
在尝试其他操作之前,您必须至少学习VBA的基础知识。您无法从宏录制器或在本网站或其他网站上找到的代码片段中学习VBA。搜索“Excel VBA教程”。有许多在线教程可供选择,因此请找到一个与您的学习风格相匹配的教程。我更喜欢书。我参观了一个很好的图书馆,复习了他们的Excel VBA入门,借了最有希望在家继续学习的书,然后买了一本我认为最好的书作为永久书