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来确保它从当前工作簿所在的同一文件夹中打开另一个工作簿。