VBA宏将数据从一个表覆盖到另一个表

VBA宏将数据从一个表覆盖到另一个表,vba,excel,Vba,Excel,如果您有两个名为Workbook1和Workbook2的工作簿,并且每个工作簿都有相同的表(以列为单位),称为reference\u table,并且您希望从工作簿1更新工作簿2的reference\u table,如何编写一个完全覆盖工作簿2中的参考表的宏 需要完全覆盖的原因是,新的reference\u表可能比需要更新的表小 到目前为止,我一直在修改代码,但我不知道如何与表交互 Sub Overwrite() Dim fso As FileSystemObject Dim f

如果您有两个名为
Workbook1
Workbook2
的工作簿,并且每个工作簿都有相同的表(以列为单位),称为
reference\u table
,并且您希望从
工作簿1
更新
工作簿2
reference\u table
,如何编写一个完全覆盖
工作簿2
中的
参考表的宏

需要完全覆盖的原因是,新的
reference\u表
可能比需要更新的表小

到目前为止,我一直在修改代码,但我不知道如何与表交互

Sub Overwrite()
    Dim fso As FileSystemObject
    Dim fldBase As Folder
    Dim fWb As File

    Dim wsOrigin As Worksheet
    Dim newData As Name
    Dim newRng As Range

    Dim refWb As Worksheet
    Dim oldData As Name
    Dim oldRng As Range

    'Get current version of Table1
    Set wsOrigin = ThisWorkbook.Worksheets("Sheet1")  '<-- adjust to your ws name in Dashboard
    Set newData = wsOrigin.Names("Table1") '<-- Origin table name
    Set newRng = newData.RefersToRange

    'Set current workbooks file location as base
    Set fso = New FileSystemObject
    Set fldBase = fso.GetFolder(ThisWorkbook.Path)

    For Each fWb In fldBase.Files
        If fWb.Name = "Worksheet2.xls*" Then

            'Open Worksheet that needs upodating
            Set refWb = Application.Workbooks.Open(Filename:=fWb.Path, ReadOnly:=False)
            Set oldData = refWb.Names("Table1") '<-- Table name
            Set oldRng = oldData.RefersToRange

            'Old data removed
            oldData.DataBodyRange.Delete

            'Add new data
            oldRng = newRng.Value

            'Close and save updated file
            'refWb.Close SaveChanges:=True

        End If

    Next

End Sub
子覆盖()
将fso设置为文件系统对象
Dim fldBase As文件夹
将fWb设置为文件
将源文件设置为工作表
将newData设置为名称
变暗新RNG As范围
Dim refWb As工作表
将旧数据作为名称
变暗oldRng As范围
'获取表1的当前版本
设置wsOrigin=thiswoolk.Worksheets(“Sheet1”)”您应该阅读

对于你的问题,这可能会有帮助

Sub CopyToWks(wks1 As Worksheet, wks2 As Worksheet, tblName As String)

    Dim tbl1 As ListObject
    Dim tbl2 As ListObject
    Dim rg As Range

    Set tbl1 = wks1.ListObjects(tblName)
    Set rg = tbl1.Range

    Set tbl2 = wks2.ListObjects(tblName)
    tbl2.Delete

    rg.Copy wks2.Range("A1")

End Sub
测试可能是这样的

Sub testIt()
Dim wb1 As Workbook
Dim wb2 As Workbook
Dim wks1 As Worksheet
Dim wks2 As Worksheet

    Set wb1 = Workbooks("WB1.XLSM")
    Set wks1 = wb1.Sheets(1)
    Set wb2 = Workbooks("WB2.XLSM")
    Set wks2 = wb2.Sheets(1)

    CopyToWks wks1, wks2, "Table1"

End Sub

谢谢你的链接,这确实是我需要学习的很多内容,也谢谢你的例子,当两个工作表都打开时,这很有效。现在我只需要让它工作,这样它就可以打开
workbook 2
并执行代码。是的,你必须确保两个工作簿都打开了。你可以使用
工作簿。打开
,就像在你发布的代码中那样。所以我想,你很熟悉如何做到这一点。我在某种程度上,你可以说我在学习曲线上打得比我的体重还重:)。但是,是的,我想我可以从这里一起破解,我只需要使用FSO来确保它从当前工作簿所在的同一文件夹中打开另一个工作簿。