我对从头开始创建VBA代码一无所知,我只是通过记录我的行为来完成它们。但是,录制功能似乎无法完成我想要在报告上发生的事情。我想请求您如何将我的“主表单”表格中的特定数据复制并粘贴到“数据库”表格。
我想从“主表格”表格中复制数据(e3:e7,h3:h7,k3:k7,i12:i16,i18:i21,i23)并将其粘贴到我的“数据库”表格中(a2 :y2)当我点击“主表格”表格中的“保存”按钮时。每次单击“保存”按钮时都必须重复此操作,新的数据集必须转到“数据库”表中的下一个空行。
我希望有人可以帮助我。不幸的是,我不知道如何在这里附上文件。
谢谢。
答案 0 :(得分:0)
您不能在非连续范围内使用.Copy
方法。
然而,大多数时候人们都希望"复制"他们真正关心的是传递值,这可以在没有复制/粘贴程序的情况下完成(如果你还需要复制格式化等等,这可以按照下面的方式完成)。
将它放在Workbook代码模块中,而不是普通的代码模块,它必须进入Workbook代码模块。每次在工作簿上执行TransferValues
时,都会调用子例程Save
。
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Application.Run "TransferValues"
End Sub
把它放在普通的代码模块中。
<强> REVISED 强>
由于非连续范围,我不得不进行一些更改,我们需要遍历范围.Areas
,然后遍历每个范围内的单个单元格。
Private Sub TransferValues()
Dim wsMain As Worksheet: Set wsMain = Sheets("Main Form")
Dim wsData As Worksheet: Set wsData = Sheets("Database")
Dim rngToCopy As Range: Set rngToCopy = wsMain.Range("e3:e7,h3:h7,k3:k7,i12:i16,i18:i21,i23")
Dim c As Long
Dim ar As Range
Dim cl As Range
Dim lastRow As Long
Dim rngDestination As Range
'Get the last row in Database sheet:
lastRow = Application.WorksheetFunction.CountA(wsData.Range("A:A"))
Set rngDestination = wsData.Cells(lastRow + 1, 1).Resize(1, 25).Offset(1, 0)
For Each ar In rngToCopy.Areas
For Each cl In ar
c = c + 1
'I used this next line for testing:
' rngDestination.Cells(c).Value = cl.Address
rngDestination.Cells(c).Value = cl.Value
Next
Next
End Sub