0

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

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

我希望有人可以帮助我解决这个问题。不幸的是,我不知道如何在此处附加文件。

谢谢你。

4

1 回答 1

0

您不能.Copy在非连续范围上使用该方法。

然而,大多数时候人们想要“复制”一些东西,他们真正关心的是传输值,这可以在没有复制/粘贴过程的情况下完成(如果您还需要复制格式/等,这可以类似地完成以下)。

把这个放到Workbook代码模块中,不是普通的代码模块,必须放到Workbook代码模块中。TransferValues每次您Save对工作簿执行操作时,这都会调用一个子例程。

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)

    Application.Run "TransferValues"

End Sub

把它放在普通的代码模块中。

修改

由于范围不连续,我不得不进行一些更改,我们需要遍历范围.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
于 2013-08-08T14:29:44.680 回答