用于将数据复制和粘贴到另一个工作表的基本VBA代码

时间:2013-08-08 13:37:36

标签: vba

我对从头开始创建VBA代码一无所知,我只是通过记录我的行为来完成它们。但是,录制功能似乎无法完成我想要在报告上发生的事情。我想请求您如何将我的“主表单”表格中的特定数据复制并粘贴到“数据库”表格。

我想从“主表格”表格中复制数据(e3:e7,h3:h7,k3:k7,i12:i16,i18:i21,i23)并将其粘贴到我的“数据库”表格中(a2 :y2)当我点击“主表格”表格中的“保存”按钮时。每次单击“保存”按钮时都必须重复此操作,新的数据集必须转到“数据库”表中的下一个空行。

我希望有人可以帮助我。不幸的是,我不知道如何在这里附上文件。

谢谢。

1 个答案:

答案 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