我正在尝试比较两个来源的支出数据:来自用户的精选人工输入和针对不同业务部门的自动摘录。这两个来源的共同数据是支出的ID。
这个想法是将两个数据源(excel表)聚合到一个表中,其中前两列是支出的ID,下一列是与该ID相关的来自用户的支出数据,最后一个是支出自动提取的数据。
在此表中,我将每个ID的总支出“翻倍”,但是我可以创建数据透视表,在其中将用户输入与每个ID的自动提取的内容进行清楚地比较。
我强调了我需要复制和粘贴的重要字段。 [![PGIvsManual] [3]] [3]
我的代码如下
Sub PGIvsManualInput()
With Application
.ScreenUpdating = False
.EnableEvents = False
End With
Set PGIvsManualTable = Worksheets("PGI vs Dépenses (Auto)").ListObjects("PGIvsManualInputAuto")
Set PGITable = Worksheets("PGI Clean").ListObjects("PGIExtract")
Set ManualInputTable = Worksheets("Dépenses").ListObjects("Dépenses")
'Cleaning the table
With Worksheets("PGI vs Dépenses (Auto)").Range("PGIvsManualInputAuto")
.ClearContents
.Borders(xlInsideHorizontal).LineStyle = xlNone
End With
With PGIvsManualTable
If .ListRows.Count >= 1 Then
.DataBodyRange.Rows.Delete
End If
End With
'Copy the data
PGITable.ListColumns(1).DataBodyRange.Resize(, 2).Copy Destination:= _
PGIvsManualTable
蚂蚁就是它变得凌乱的地方。我什至无法正确导入第一批数据!我正在尝试从PGITable复制前两列并将其粘贴到PGIvsManualTable的前两列中。即使输入表和目标表的列数不相同,以前在第一个示例中也没有定义任何目标列的情况下可以正常工作
但是在这种情况下,它将粘贴扩展到了目标表的所有列!我不理解这种说法,因为在我之前的示例中使用完全相同的代码不会发生这种情况!
我尝试将目的地设置如下,但总是出现错误:
PGIvsManualTable.ListColumns(1).DataBodyRange.Resize(, 2) ==> Error 91
PGIvsManualTable.DataBodyRange(1,1) ==> Error 438
PGIvsManualTable.ListColumns(1).Resize(, 2) ==> Error 438
还有其他一些,但是它无法正常工作。
根据我在ListObecjts.DataBodyRange中提供的坐标,我希望输出是我选择的列在目标列中正确复制/粘贴的结果。
我想,如果我设法使第一个导入工作成功,那么所有其他导入都将在同一模板上工作,但是与此同时,我的代码似乎也可以在前面的示例中工作。
答案 0 :(得分:0)
如果您尝试粘贴到DataBodyRange.Rows
中,则删除DataBodyRange
会引起问题。
作为解决方法,您可以删除第一行之后的所有行,例如以下示例:
Sub Test()
Dim firstTbl As ListObject, secondTbl As ListObject
Set firstTbl = Sheet1.ListObjects("Table1")
Set secondTbl = Sheet1.ListObjects("Table2")
With secondTbl
.DataBodyRange.Clear
If .ListRows.Count > 1 Then
.DataBodyRange.Offset(1).Resize(.ListRows.Count - 1).Rows.Delete
End If
End With
firstTbl.ListColumns(1).DataBodyRange.Resize(, 2).Copy secondTbl.DataBodyRange(1, 1)
End Sub