2017-10-22 160 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