因此,我是Excel VBA的新手,并且给了我一个项目,该项目需要将数据从工作表1复制到新工作簿。问题在于复制,粘贴和插入新行。 (有两个子例程,但是第二个子例程大致相同,这是必需的,请原谅),谢谢。
Sub CopyInfo()
On Error GoTo Err_Execute
wb1.Sheets("dataform").Range("L2:N2").Copy
wb2.Sheets(shtname).Range("A2:C27").Rows("1:1").Insert Shift:=xlDown
wb2.Sheets(shtname).Range("A2:C28").PasteSpecial (xlPasteValues)
wb1.Sheets("dataform").Range("B2:B28").Copy
wb2.Sheets(shtname).Range("D2").Insert Shift:=xlDown
wb1.Sheets("dataform").Range("D2:D28").Copy
wb2.Sheets(shtname).Range("F2").Insert Shift:=xlDown
update
wb1.Sheets("Setlist").Range("G2").Copy
wb2.Sheets(shtname).Range("E2:E27").Rows("1:27").Insert Shift:=xlDown
wb2.Sheets(shtname).Range("E2:E28").Paste1Special
wb2.Sheets(shtname).Columns().AutoFit
Err_Execute:
If Err.Number = 0 Then MsgBox "All have been copied!" Else _
MsgBox Err.Description
End Sub
Sub update()
wb1.Sheets("dataform").Range("D2:D28").Copy
wb1.Sheets("dataform").Range("E2:E28").PasteSpecial
wb1.Sheets("dataform").Range("F2:F28").PasteSpecial
wb1.Sheets("dataform").Range("F2:F28").Copy
wb2.Sheets(shtname).Range("G2").Insert Shift:=xlDown
End Sub
该程序需要从当前工作簿工作表1副本到另一个工作簿。第一个工作簿工作表1将具有新的行加载项,并且代码会自动对其进行更新。当前,如果当前工作簿工作表1添加新行,则必须手动更新代码。
答案 0 :(得分:0)
好的,所以有几个步骤可以达到您想要的结果。
我假设您的第二个工作簿尚未打开,因此您需要先在VBA中打开它,然后才能复制您的范围。在SO和Google上有很多答案,向您展示了如何做到这一点。
由于要在原始工作表中添加行,因此需要一种在代码中包含行的方法。有几种选择方法。
您可以创建一个表并使用Dim As ListObject
进行声明,然后在VBA中进行设置。这样,当新行添加到表中时,它们将被自动包括在内。第二种方法是使用动态命名范围(请参见“公式”标签下的“名称管理器”),该范围包括添加新行时的行。
可能最重要的部分是通过声明变量和对象来简化代码。
当前,您不断写wb1.Sheets("dataform")
。而是使用Dim DataForm as Worksheet
和Set Dataform = wb1.Sheets("dataform")
。这样,当使用地址表时,您只需编写Dataform.Range("A1:A1")
。参见以下示例。
Dim Source As Workbook
Set Source = ThisWorkbook
Dim Dataform As Worksheet
Set Dataform = Source.Sheets("Dataform")
Dataform.Range("L2:N2").Copy 'See how you can just adress the sheet by name
现在,如果您还要将范围声明为表/命名范围,这将使代码更易于处理。由于您还在每次操作期间总是添加一行,因此一种更有效的方法是使用for each loop
浏览所有已命名的范围/表,将它们复制,然后在目标表中插入新行,然后糊。
希望这是一些灵感
答案 1 :(得分:0)
Sub CopyInfo()
On Error GoTo Err_Execute
dataform.Range("L2:N2").Copy
wb2.Sheets(shtname).Range("A2").Rows("1:27").Insert Shift:=xlDown
wb2.Sheets(shtname).Range("A2:C28").PasteSpecial (xlPasteValues)
dataform.Range("LocationName").Copy
wb2.Sheets(shtname).Range("D2").Insert Shift:=xlDown
dataform.Range("Reading").Copy
wb2.Sheets(shtname).Range("F2").Insert Shift:=xlDown
update
wb1.Sheets("Setlist").Range("D2").Copy
wb2.Sheets(shtname).Range("E2").Rows("1:27").Insert Shift:=xlDown
wb2.Sheets(shtname).Columns().AutoFit
Err_Execute:
If Err.Number = 0 Then MsgBox "All have been copied!" Else _
MsgBox Err.Description
End Sub
Sub update()
dataform.Range("Reading").Copy
dataform.Range("PreviousReading, Usage").PasteSpecial
dataform.Range("Usage").Copy
wb2.Sheets(shtname).Range("G2").Insert Shift:=xlDown
End Sub
(有更多代码,但我只添加其中一半,对于造成混乱的情况,我们感到抱歉。如果有有用的链接可以帮助您。非常感谢。)