当我运行此功能时
Call makeTable("Uber Tracker", range(Cells(7, 1), Cells(LastUber, 42)))
Call makeTable("Finance Tracker", range(Cells(21, 1), Cells(LastFinance, 23)))
第一个调用正常,但第二个调用错误1004工作表范围必须与正在创建的表位于同一个工作表上。
Sub makeTable(TableSheet As String, TableRange As range)
On Error GoTo errorHandler
Sheets(TableSheet).ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet
errorHandler:
If Err.Number <> 0 Then
Debug.Print "Error number :" + CStr(Err.Number) + " reason: " + Err.Description
End If
End Sub
有什么问题?我已经检查了它正在选择哪个工作表,它应该是正确的,范围相同。
答案 0 :(得分:2)
您的TableRange位于ActiveSheet上(无论在何处)。 您正尝试在工作表(&#34; Finance Tracker&#34;)上创建一个表格,其范围取自活动表格。
根据您真正需要的内容,您可以像这样更改maketable sub:
ActiveSheet.ListObjects.Add(xlSrcRange, TableRange, ,xlYes).name = TableSheet
或者像这样更改通话:
Call makeTable("Finance Tracker", sheets("Finance Tracker").range(sheet("Finance Tracker").Cells(21, 1), sheet("Finance Tracker").Cells(LastFinance, 23)))
确保所有内容都在同一张纸上发生。
修改强>
还有一件事要尝试(以这种方式为我工作):
Worksheets("Uber Tracker").Activate
Call makeTable("Uber Tracker", Range(Cells(7, 1), Cells(10, 42)))
Worksheets("Finance Tracker").Activate
Call makeTable("Finance Tracker", Range(Cells(21, 1), Cells(30, 23)))
只需确保用于创建表格的范围位于添加表格的同一张纸上。有很多方法可以做到这一点,这些只是几个例子。
答案 1 :(得分:0)
您也可以使用传递给例程的任何范围的地址:
Sheets(TableSheet).ListObjects.Add(xlSrcRange, Sheets(TableSheet).Range(TableRange.Address), ,xlYes).name = TableSheet