测试空的Listobject标头

时间:2013-06-06 16:57:10

标签: excel excel-vba excel-tables vba

如何测试Excel(版本> = 2010)ListObject标头是否为空?

如果我选择了这样的标题,那么

?selection.value -> Column1 (or Spalte1, depending on client language)
?isEmpty(selection) -> false

empty header

就VBA而言,它的行为就像一个非空单元格。

非解决方案:写入单元格,然后检查其值是否已更改。

3 个答案:

答案 0 :(得分:1)

正如Doug Excel所说,只创建一个默认的标题名称“Column1”。

如果您想阅读列标题,可以使用以下代码。

Sub sample()

    Dim tbl As Object
    Set tbl = Sheets("sheet1").ListObjects("Table1")
   MsgBox Trim(tbl.ListRows(1).Range.Cells(0, 1))

End Sub

答案 1 :(得分:0)

我们选择了这个解决方案。在工作簿的某处插入一个ListObject(aka表),其中包含一列,标题为空。将此标题命名为 emptyHeader

使用下面的函数,您现在可以检查给定范围是否为空,即具有空单元格值或ListObject为空标题自动设置的值。

解决方案并不完美。如果用户将第二列的标题值设置为Column42(如果是英语),则该函数将错误地返回true。

Function isRealyEmpty(ra As Range) As Boolean
    If IsEmpty(ra.Value) Then
        isRealyEmpty= True
        Exit Function
    End If

    ' The value of the empty reference header
    emptyHeaderValue = ThisWorkbook.Names.Item("emptyHeader").RefersToRange.Value
    l = Len(emptyHeaderValue) - 1

    targetValue = ra.Value

    If Left(emptyHeaderValue, l) = Left(targetValue, l) Then
        postFix = Right(targetValue, Len(targetValue) - l)
        isRealyEmpty= IsNumeric(postFix)
    Else
        isRealyEmpty= False
    End If

End Function

答案 2 :(得分:0)

这是一种傻瓜式的方法来测试一个单元格是否真的是空的。 我们测试原始值是否等于已清除单元格的值。

此解决方案的缺点是我们必须修改工作簿,这在我们的案例中是不可接受的。

Function isRealyRealyEmpty(ra As Range) As Boolean
    v = ra.Formula
    ra.Formula = ""
    isRealyRealyEmpty = (ra.Formula = v)
    ra.Formula = v
End Function