如何测试 Excel(版本 >= 2010)ListObject 标头是否为空?
如果我选择这样一个空标题,那么
?selection.value -> Column1 (or Spalte1, depending on client language)
?isEmpty(selection) -> false
所以就 VBA 而言,它的行为就像一个非空单元格。
非解决方案:写入单元格,然后检查其值是否更改。
如何测试 Excel(版本 >= 2010)ListObject 标头是否为空?
如果我选择这样一个空标题,那么
?selection.value -> Column1 (or Spalte1, depending on client language)
?isEmpty(selection) -> false
所以就 VBA 而言,它的行为就像一个非空单元格。
非解决方案:写入单元格,然后检查其值是否更改。
正如 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
我们选择了这个解决方案。在工作簿的某处插入一个带有一列的 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
这是测试单元格是否真的是空的万无一失的方法。我们测试原始值是否等于清除单元格的值。
此解决方案的缺点是我们必须修改工作簿,这在我们的案例中是不可接受的。
Function isRealyRealyEmpty(ra As Range) As Boolean
v = ra.Formula
ra.Formula = ""
isRealyRealyEmpty = (ra.Formula = v)
ra.Formula = v
End Function