无法创建表VBA excel

时间:2015-12-23 10:20:54

标签: excel vba excel-vba

当我运行此功能时

    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

有什么问题?我已经检查了它正在选择哪个工作表,它应该是正确的,范围相同。

2 个答案:

答案 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