我创建了一个循环在表1的所有标题列中的过程,并在表2中搜索相同的标题列,以根据匹配的列名更新重定位单元格。
这是此程序的代码:
Do While i <= SourceTableColumnCount
ColumnName = sourceTable.HeaderRowRange(i).Value
On Error Resume Next
DestColumnIndex = destTable.Range.Find(ColumnName, MatchCase:= True, SearchFormat:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookAt:=xlWhole).Count
If Err.Number <> 0 Then
'In case column name in source table is not found in destination table
Else
destTable.DataBodyRange(DestRowIndex + 1, DestColumnIndex).Value = sourceTable.DataBodyRange(r + 1, i).Value
End If
i = i + 1
Loop
问题是DestColumnIndex始终为1.尽管目标表中的列名与源表中的列名匹配。它应该像这样工作:
1-转到表1中的第一列并获取它的值 2-转到表2并搜索步骤1中的值 3-对于找到的结果,获取range.column(此列的索引) 4-将单元格值设置为范围(Row,DestColumnIndex)
我的问题在于步骤3,其中range.column始终为1,因此步骤4的输出始终更新列索引为1的单元格。
我希望问题很清楚。
答案 0 :(得分:0)
Do While i <= SourceTableColumnCount
ColumnName = sourceTable.HeaderRowRange(i).Value
On Error Resume Next
DestColumnIndex = destTable.Range.Find(ColumnName, MatchCase:=True, SearchFormat:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookAt:=xlWhole).Column - destTable.Range.Column + 1 'why would you use .Count?, it is a single cell, its count will always be 1
If Err.Number <> 0 Then
'In case column name in source table is not found in destination table
Else
destTable.DataBodyRange(DestRowIndex + 1, DestColumnIndex).Value = sourceTable.DataBodyRange(r + 1, i).Value
End If
i = i + 1
Loop