1

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

如果我选择这样一个标题,那么

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

空标题

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

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

4

3 回答 3

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
于 2013-06-06T18:59:59.113 回答
0

我们选择了这个解决方案。在工作簿的某处插入一个带有一列的 ListObject(又名表),将标题留空。将此标题命名为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
于 2013-06-29T13:49:19.030 回答
0

这是测试单元格是否真的是空的万无一失的方法。我们测试原始值是否等于清除单元格的值。

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

Function isRealyRealyEmpty(ra As Range) As Boolean
    v = ra.Formula
    ra.Formula = ""
    isRealyRealyEmpty = (ra.Formula = v)
    ra.Formula = v
End Function
于 2013-06-29T13:56:23.497 回答