返回表格范围原始样式的地址

时间:2017-09-26 08:33:04

标签: excel vba excel-vba

我有一个范围,定义如下:

Call Test (Range("tblInsRep[#all]"))
Sub Test (rngSRange As Range)
.
.
.
End Sub

我需要分析上面的地址(tblInsRep[#all])以定义给定的表地址是否包含Header,使用此代码:(如果rngSRange声明为String参数)

Call Test ("tblInsRep[#all]")
Sub Test (strSRange As String)
    Dim rngSRange As Range
    Dim HControl As Boolean 'Header Control

    Set rngSRange = Range(srtSRange)

    HControl = IIf(InStr(1, strSRange, "[#All]") > 0, True, False) 
.
.
.
End Sub

因此,我想对Test子例程使用第一种方法,因为它更干净简洁。

如何从下面的tblInsRep[#all]返回rngSRange字符串:

Call Test(Range("tblInsRep[#all]"))

通话:

Sub Test (rngSRange As Range)
    Dim HControl As Boolean 'Header Control
    Dim strSRange As String

    strSRange=...(rngSRange)

    HControl = IIf(InStr(1, strSRange, "[#All]") > 0, True, False) 
.
.
End Sub

我的工作表表格的屏幕截图

enter image description here

2 个答案:

答案 0 :(得分:1)

我不确定你想要实现的目标,或者你的最终目标,这个太长了,不能作为一个冷却,所以我把它放在这里(我将在以后删除)。

你所拥有的(根据你的屏幕截图)是一个被称为ListObject的VBA对象。

如果要使用VBA定义表,可以使用以下代码:

Dim Tbl As ListObject
Dim strSRange As String

' set the ListObject Table
Set Tbl = ThisWorkbook.Worksheets("Sheet1").ListObjects("tblInsRep")

strSRange = Tbl.Range.Address ' <-- this gets the address of the entire Table's range

我不确定使用String获取"tblInsRep[#all]"的目的是什么。

让我知道你打算用它做什么,也许我们可以找到更好的解决方案。

答案 1 :(得分:1)

请试试这个:

Public Function test(rngSRange As Range, tablename As string)

    Dim strSRange As String, checktbl As String

    checktbl = ActiveSheet.ListObjects(tablename).HeaderRowRange.Address

    strSRange = rngSRange.Address

    test = IIf(InStr(1, strSRange, checktbl), True, False)

End Function

转到您的工作表并撰写例如:test(J4:J5;"Table3")