复制和复制的基本VBA代码;将数据粘贴到其他工作表

复制和复制的基本VBA代码;将数据粘贴到其他工作表,vba,Vba,我对从头开始创建VBA代码一无所知,我只通过记录我的操作来完成。然而,录制功能似乎无法实现我希望在报告中实现的功能。我想请您帮助我如何将特定数据从“主表单”表复制并粘贴到“数据库”表 我想从“主窗体”工作表(e3:e7、h3:h7、k3:k7、i12:i16、i18:i21、i23)复制数据,并在单击“主窗体”工作表中的“保存”按钮时将其粘贴到我的“数据库”工作表(a2:y2)中。每次单击“保存”按钮时,必须重复此操作,并且新数据集必须转到“数据库”工作表中的下一个空行 我希望有人能帮我。不幸的

我对从头开始创建VBA代码一无所知,我只通过记录我的操作来完成。然而,录制功能似乎无法实现我希望在报告中实现的功能。我想请您帮助我如何将特定数据从“主表单”表复制并粘贴到“数据库”表

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

我希望有人能帮我。不幸的是,我不知道如何将文件附加到这里


谢谢。

您不能对非连续范围使用
.Copy
方法

然而,大多数时候,人们想要“复制”某些东西,他们真正关心的是传递值,这可以不用复制/粘贴过程来完成(如果您还需要复制格式等,这可以像下面一样完成)

将其放在工作簿代码模块中,而不是普通代码模块中,它必须放在工作簿代码模块中。每次在工作簿上执行
保存
操作时,都会调用一个子例程
TransferValues

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

    Application.Run "TransferValues"

End Sub
把它放在普通代码模块中

修订版

由于范围不连续,我不得不做一些更改,我们需要遍历范围的
.area
,然后遍历每个区域中的单个单元格

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

你有机会测试我的建议了吗?嗨,大卫,谢谢你关注我的问题。然而,在我按照你给我的指示将代码粘贴到哪里之后,我注意到它只复制了单元格e3:e7中的代码……我该怎么做才能让它复制其他单元格中的所有数据?@user2664641我在上面做了一个修订。问题是
.Cells.Count
在非连续范围内的行为异常。使用非连续范围有点棘手,但我认为如果我们越过范围
区域
,然后是每个区域内的
单元格
,应该可以解决这个问题。嗨,大卫,我尝试了修改后的代码,但突然出现了这个错误,“无法运行宏”Dummyfile1.xlsm!CopyPaste。“:(您没有正确复制我的代码,因为在任何地方都没有对名为“CopyPaste”的宏的引用。我做了另一个修订(工作表名称)所以请再试一次,但要小心使用与我展示的完全相同的代码。我复制代码的方式与复制第一个代码的方式相同。我不确定这次为什么不起作用。我真的很抱歉。