确定范围是否已经是表格

时间:2018-03-20 09:44:49

标签: excel vba

我有一个问题,过去几天一直困扰着我。

我有一个包含100个表的工作表,以及一个代码,可以在运行时将更多数据插入到该工作表中。

我们的想法是将添加的数据转换为表格。但是我遇到了一些问题。

我将尝试解释我当前的方法,我有一个for循环,可以使用.find方法基于{{轻松选择每个当前表中的数据和已添加的新数据1}}奇数或偶数。然后我运行了spearsheet(因为所有数据都在同一列中。)此时我遇到了一个麻烦的世界。

首先,我尝试选择应该是表格的数据范围(有时是,其他情况不是)并转换为表格。这没有用,因为我发现你无法强迫桌子再次成为同一张桌子。

其次,我尝试使用i来解决这个问题。我试图将范围取消列为表格,然后如果出现错误,即范围不是表格,则转到使范围成为表格的部分,如果选择范围是表格,则从范围中删除表格并将范围重新格式化为表格。

此时我的想法不合时宜。下面是我第二次尝试的代码。

On Errors

我试图尽可能地评论代码,并让您了解我的思维过程。我希望有更简单的方法可以做到这一点,但不是我能想到的。

感谢您提供的任何帮助

2 个答案:

答案 0 :(得分:0)

这是ws.Range(" A1:C8")是一个表(包括标题的整个表)的示例。如果table else False

,则使用函数返回True
Option Explicit

Sub test()

    Dim wb As Workbook
    Dim ws As Worksheet
    Dim testRange As Range

    Set wb = ThisWorkbook
    Set ws = wb.Worksheets("Sheet1")
    Set testRange = ws.Range("A1:C8")

    If IsTable(testRange, ws) Then
        Debug.Print "Table"
    Else

    End If

End Sub
Public Function IsTable(ByVal testRange As Range, ByVal ws As Worksheet) As Boolean

Dim table As ListObject
Dim tableAddresses() As String
ReDim tableAddresses(ws.ListObjects.Count)
Dim counter As Long

For Each table In ws.ListObjects

    tableAddresses(counter) = table.Range.Address 'or databody range depending on your requirements
    counter = counter + 1
Next table

Dim i As Long

For i = LBound(tableAddresses) To UBound(tableAddresses)

    If testRange.Address = tableAddresses(i) Then
        IsTable = True
        Exit Function
    End If
Next i

End Function

答案 1 :(得分:0)

可以使用以下两个选项中的任何一个将新数据添加到ListObject

  1. ListObject的最后一行之后的下一行中发布新数据。 ListObject会自动调整大小以包含新行。

  2. 调整Range的{​​{1}}大小以包含新行。请注意,在调整ListObject的大小时,ListObject必须保留在同一行中。

  3. 要验证HeaderCell中的任何Range是否属于ListObject,请使用该范围的ListObject属性: 设置lo = rg.ListObject

    我还建议声明变量和对象的使用,所以这样的行:ActiveSheet.ListOnjects.Items(1).Unlist将写成:ws.ListOnjects.Items(1).Unlist。然后,在编译或运行过程时,将突出显示拼写错误,前提是您有机会进行更正,例如:ws.ListObjects(1).Unlist。要强制声明变量和语法检查,请参见图。下方。

    enter image description here

    关于Style的{​​{1}},您可以使用此行默认设置ListObject

    workbook

    或在添加 wb.DefaultTableStyle = "TableStyleLight15" 'where wb is the workbook object 时可以设置,如:

    ListObject

    尝试此程序:

        ws.ListObjects.Add(xlSrcRange, rg, , xlYes, , "TableStyleLight15")