我有一个excel VBA子过程,我想将工作簿中的excel表的名称传递给此子的参数 .
例如:
Sub Copyandfind()
SourceTableColumnCount = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").Range.Columns.Count
SourceTableRowCount = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").ListRows.Count
DestRowIndex = ThisWorkbook.Worksheets("Sheet2").ListObjects("Table2").ListRows.Count
i = 1
r = 0
Do While r < SourceTableRowCount
ThisWorkbook.Worksheets("Sheet2").ListObjects("Table2").ListRows.Add AlwaysInsert:=True
Do While i <= SourceTableColumnCount
ColumnName = ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").HeaderRowRange(i).Value
On Error Resume Next
DestColumnIndex = ThisWorkbook.Worksheets("Sheet2").ListObjects("Table2").Range.Find(ColumnName, MatchCase:= _
True, SearchFormat:=False, SearchOrder:=xlByColumns, SearchDirection:=xlPrevious, LookAt:=xlWhole).column
If Err.Number <> 0 Then
'In case column name in source table is not found in destination table
Else
ThisWorkbook.Worksheets("Sheet2").ListObjects("Table2").DataBodyRange(DestRowIndex + 1, _
DestColumnIndex).Value = _
ThisWorkbook.Worksheets("Sheet1").ListObjects("Table1").DataBodyRange(r + 1, i).Value
End If
i = i + 1
Loop
r = r + 1
i = 1
DestRowIndex = DestRowIndex + 1
Loop
MsgBox ("Total records saved: " & SourceTableRowCount)
End Sub
我需要替换所有要作为参数传递的table1和table2,以便通过传递表名来将此过程与不同的表一起使用 .
谢谢..
2 回答
这里 . 我没有测试它 .
我会请求范围作为输入 . 宏将开始寻找范围的交叉和工作表中沿该宏的行的listobject .
EDIT 更清晰,更简洁:
DefineTable将找到您的名字并吐出listobject .
EDIT2 比以前更新鲜: