Excel 循环浏览工作表时阻止表重叠

Excel 循环浏览工作表时阻止表重叠,excel,vba,Excel,Vba,我目前正在使用VBA循环浏览工作簿上的每个工作表,确定使用的范围和表格格式。以下是我找到并尝试使用的代码: Sub loop_test() Dim ws As Worksheet Dim StartCell As Range, TblRng As Range Dim LastRow As Long, LastColumn As Long Dim objTable As ListObject For Each ws In ThisWorkbook.Shee

我目前正在使用VBA循环浏览工作簿上的每个工作表,确定使用的范围和表格格式。以下是我找到并尝试使用的代码:

Sub loop_test()
    Dim ws As Worksheet
    Dim StartCell As Range, TblRng As Range
    Dim LastRow As Long, LastColumn As Long
    Dim objTable As ListObject

    For Each ws In ThisWorkbook.Sheets
        Set objTable = Nothing
        With ws
            Set StartCell = .Range("A1")
            LastRow = .Cells(.Rows.Count, StartCell.Column).End(xlUp).Row
            LastColumn = .Cells(StartCell.Row, .Columns.Count).End(xlToLeft).Column


            Set TblRng = .Range(StartCell, .Cells(LastRow, LastColumn))

            ' Test if table exists on sheet
            On Error Resume Next
            Set objTable = .ListObjects(1)
            On Error GoTo 0

            ' If table overlaps with TblRng - Convert to Range
            If Not Intersect(objTable.Range, TblRng) Is Nothing Then
                objTable.Unlist
            End If

            ' Create Table
            Set objTable = .ListObjects.Add(xlSrcRange, TblRng, , xlYes)

            'Styling
            objTable.TableStyle = "TableStyleMedium2"

        End With
    Next ws
End Sub
当我运行它时,我得到一个“91”错误:“对象变量或带块变量未设置”。调试将我引向第21行:
如果不相交(objTable.Range,TblRng)为零,则


当我把它注释掉时,它会一直工作到范围重叠为止。在开始运行宏后,如何确保定义了
objTable
。。。工作表可能没有表格

'首先检查表是否实际存在:
如果不可反对,那就什么都不是了
'如果表格与TblRng重叠-转换为范围
如果不相交(objTable.Range,TblRng),则为空
不可列出
如果结束
如果结束


您可以简化检查工作表是否包含表格,而不是在错误恢复下一步时使用
在错误转到0时使用
。一种方法是检查
.ListObjects.Count>是否为0

If.ListObjects.Count>0则
....
如果结束
或者,如果工作表上有多个表,则可以为每个
循环使用一个

Dim tbl作为ListObject
对于.ListObjects中的每个tbl
如果不相交(tbl.Range,TblRng)则为零
待定。未上市
如果结束

您必须首先检查
,如果不可对象,则为Nothing
。。。工作表可能没有表格

'首先检查表是否实际存在:
如果不可反对,那就什么都不是了
'如果表格与TblRng重叠-转换为范围
如果不相交(objTable.Range,TblRng),则为空
不可列出
如果结束
如果结束


您可以简化检查工作表是否包含表格,而不是在错误恢复下一步时使用
在错误转到0时使用
。一种方法是检查
.ListObjects.Count>是否为0

If.ListObjects.Count>0则
....
如果结束
或者,如果工作表上有多个表,则可以为每个
循环使用一个

Dim tbl作为ListObject
对于.ListObjects中的每个tbl
如果不相交(tbl.Range,TblRng)则为零
待定。未上市
如果结束

您必须首先检查
如果不可对象为Nothing
。。。工作表可能没有表格。请不要在错误恢复时使用
,而是下一步使用
当错误转到0时,您可以使用
If.ListObjects.Count>0
来检查工作表是否包含
ListObject
。谢谢@BigBen,但是如何将If语句添加到代码中?您必须首先检查
If Not objTable Is Nothing
。。。工作表可能没有表格。请不要在错误恢复时使用
,而是下一步使用
当错误转到0时,您可以使用
If.ListObjects.Count>0
检查工作表是否包含
ListObject
。谢谢@BigBen,但是如何将If语句添加到代码中?