excel - VBA 宏在表格末尾插入一行,然后将先前复制的行的值粘贴到新行的特定范围内
问题描述
我正在寻找有关 VBA 宏的帮助。这是我当前的代码。**** 在哪里我需要一些代码在活动工作表的表格末尾插入一行,然后将上面代码中复制的值粘贴到(“E1:R8”)范围内(E?:R?") 新创建的行。
Sub Workbook()
Dim wb As Workbook
Set wb = Workbooks.Add
ThisWorkbook.Sheets("RFP Form").Copy Before:=wb.Sheets(1)
ThisWorkbook.Sheets("DataHelperSheet").Copy After:=wb.Sheets(1)
Application.DisplayAlerts = False
wb.SaveAs "Z:\Temp\test3.xlsx"
Application.DisplayAlerts = True
ActiveWorkbook.SaveAs FileName:="Z:\Temp\" & Range("I1").Value
Worksheets("DataHelperSheet").Activate
Range("E1:R8").Select
Selection.Copy
Workbooks("Proposal Quote Master List(LB).xlsm").Activate
Worksheets("Master List").Activate
'***
Range("E1:R298").PasteSpecial Paste:=xlPasteValues
End Sub
解决方案
不要将您的 sub 命名
Workbook
为保留字,因为 VBA 将其用于工作簿对象(请参阅参考资料Dim wb As Workbook
),这对于人类和 VBA 来说可能会非常混乱。不要混用
ThisWorkbook
andActiveWorkbook
和避免使用Activate
,ActiveWorkbook
and.Select
。ThisWorkbook
是编写代码的工作簿(它永远不会改变。ActiveWorkbook
是具有焦点的工作簿(位于顶部)并且可以通过单击鼠标轻松更改(因此它不是一个非常可靠的参考)。而是总是尝试使用像您对wb.SaveAs
.确保所有对象都指定了工作
Range
簿和工作表。如果您编写Range("I1").Value
VBA 并不确定您指的是哪个工作簿或工作表。它猜你的意思是活跃的。但这同样不是很可靠,因为这可以通过单击鼠标来改变。确保你通过使用类似的东西准确地告诉 VBA你的意思,wb.Workbooks("Sheet1").Range("I1").Value
这样 VBA 就没有开始猜测的空间了。停止使用
.Select
。代替Worksheets("DataHelperSheet").Activate Range("E1:R8").Select Selection.Copy
写吧
wb.Worksheets("DataHelperSheet").Range("E1:R8").Copy
wb
如果使用多个工作簿,请再次指定工作簿。例如,要在 E 列中查找最后使用的单元格,请使用
wsMasterList.Cells(wsMasterList.Rows.Count, "E").End(xlUp)
并使用
.Offset(RowOffset:=1)
向下移动一行到下一个要粘贴的空单元格。
所以你最终会得到类似的东西:
Option Explicit
Public Sub CreateWorkbook()
Dim wb As Workbook
Set wb = Workbooks.Add
ThisWorkbook.Sheets("RFP Form").Copy Before:=wb.Sheets(1)
ThisWorkbook.Sheets("DataHelperSheet").Copy After:=wb.Sheets(1)
Application.DisplayAlerts = False
wb.SaveAs "Z:\Temp\test3.xlsx"
Application.DisplayAlerts = True
wb.SaveAs Filename:="Z:\Temp\" & wb.Workbooks("SPECIFY YOUR SHEET").Range("I1").Value '‹~~ specify sheet name
wb.Worksheets("DataHelperSheet").Range("E1:R8").Copy
Dim wsMasterList As Worksheet
Set wsMasterList = Workbooks("Proposal Quote Master List(LB).xlsm").Worksheets("Master List")
wsMasterList.Cells(wsMasterList.Rows.Count, "E").End(xlUp).Offset(RowOffset:=1).PasteSpecial Paste:=xlPasteValues
End Sub
推荐阅读
- python - 为什么python字符串中的“%”会使传输字符无效
- tensorflow - TensorFlow Estimators MirrorStrategy 断言错误
- android - NesteadScrollView 内的 ConstraintLayout 裁剪底部元素
- javascript - react-native:如何使用自动完成进行搜索过滤。这是我的样本
- ios - 应用强制获取节点位置后的ARKit
- php - PHP 连接到 MySQL
- git - 如何成为 Yii2 贡献者?
- c# - 屏幕截图安全桌面
- javascript - 递归调用如何在函数中工作?
- excel - 粘贴后不显示日期