2017-10-22 66 views
0

我无法弄清楚为什么这个表述不起作用。Excel VBA在无效工作表上获取表格范围

Rng = Worksheets(sheetName).ListObjects(table).Range.Select 

我有一个片材“sheetX”与调用在全局工作区“的ThisWorkbook”子进程“export_json”的按钮。我希望“Thisworkbook”中的子进程在“A2”的“sheetX”中引用一个表格范围,但它会给出“应用程序定义或对象定义的错误”错误。我不想使用Application.Goto

这是为什么?我俯瞰一些基本的东西

Public Sub CommandButton1_Click() 
    sheet = ActiveSheet.Name 
    Call ThisWorkbook.export_json(sheet) 
End Sub 

Public Sub export_json(sheetName) 
    table = ThisWorkbook.get_table(Worksheets(sheetName).Range("A2")) 
    Rng = Worksheets(sheetName).ListObjects(table).Range.Select 
    Rng = Selection.Address 

表是字符串类型片是类型串的正确表名,这样是没有问题的。

+0

不使用'select' ......已经在这里重复了很多次....'RNG =工作表(SHEETNAME).ListObjects(表).Range.Address' – jsotola

+0

你不需要知道表名...这个工程'Rng = ThisWorkbook.Sheets(sheetName).Range(“A2”).ListObject.Range.Address' – jsotola

回答

0

当你尝试在函数export_json()中声明Rng时,你应该把它作为一个字符串传递,你的语法看起来有点小。

Public Sub CommandButton1_Click() 

    Dim sheetX As String 
    sheetX = ActiveSheet.Name 
    Call export_json("sheetX") 

End Sub 

Private Function export_json(sheetName As String) 

    table = ThisWorkbook.get_table(Worksheets(sheetName).Range("A2")) 
    Worksheets(sheetName).ListObjects(table).Range.Select 

End Function 
+0

不幸的是,没有工作。我尝试在参数“ – Calculus

+0

中添加字符串试试我的更改,现在应该工作? – Maldred

+0

使用选择/选择downvote – jsotola

0

试试下面的代码,没有必要使用Select

此外,我不清楚为什么您将Function的代码保存在ThisWorkbook模块中,而不是常规模块。

Public Sub CommandButton1_Click() 

    Dim TableRangeString As String 

    TableRangeString = ThisWorkbook.export_json(ActiveSheet.Name) 

    ' for debug 
    MsgBox TableRangeString 

End Sub 

Public Function export_json(sheetName) As String 
    ' use the function to return the Range.Address by changing it to return a String 

    Dim Rng As Range 

    Set Rng = Worksheets(sheetName).Range("A2").ListObject.Range 
    export_json = Rng.Address 

End Function