VBA:在 For 循环中命名表

Posted

技术标签:

【中文标题】VBA:在 For 循环中命名表【英文标题】:VBA: naming tables in a For loop 【发布时间】:2022-01-19 09:36:57 【问题描述】:

我正在使用 For 循环填充单元格,结果如下所示:

我想将每个集合格式化为一个表格,每个表格名称反映集合的编号(例如“表 1”、“表 2”等)。我想我可以用 VBA 代码做到这一点:

> ws.ListObjects.Add(xlSrcRange, ws.Range(ws.Cells(start_row,
> start_column), ws.Cells(table_height, table_width)), , xlYes).Name =
> "Table" & t_count

但我收到错误消息:

运行时错误“1004”:

一个表不能与另一个表重叠。

有什么想法可以解决这个问题吗?

提前致谢。

【问题讨论】:

根据错误消息,表格重叠。但是您没有提供完整的代码,所以除了显而易见的之外没有什么可以建议的:检查范围。 【参考方案1】:

请尝试下一个方法。两个连续范围之间必须至少存在一个空行才能成为表格。第一个 rage 列中不得存在任何间隙/空单元格:

Sub createTablesFromRanges()
  Dim ws As Worksheet, lastR As Long, start_row As Long, last_row As Long
  Dim start_column As Long, last_col As Long, t_count As Long, i As Long
  
  Set ws = ActiveSheet
  lastR = ws.Range("A" & ws.rows.count).End(xlUp).row 'calculated based on A:A column
  start_column = 1      'it can be different, if not the first column (A:A)
  t_count = 1           'first number before loop incrementation
  For i = 1 To lastR
        start_row = i   'range starting row
        last_col = ws.cells(i, ws.Columns.count).End(xlToLeft).Column 'range last column number
        last_row = ws.Range("A" & i).End(xlDown).row                  'range last row

        'create table:
        ws.ListObjects.Add(xlSrcRange, ws.Range(ws.cells(start_row, start_column), _
                ws.cells(last_row, last_col)), False, xlYes).Name = "Table" & t_count
        start_row = ws.cells(last_row, 1).End(xlDown).row - 1        'new starting row based on the next range header
         i = start_row: t_count = t_count + 1                        'increment i and t_count
         If i >= lastR Then Exit For 'after the last range, start_row returns the sheet total number of rows
  Next i
End Sub

【讨论】:

以上是关于VBA:在 For 循环中命名表的主要内容,如果未能解决你的问题,请参考以下文章

Excel VBA:For循环扫描一组工作表

使用 for 循环命名向量

Excel VBA中for循环语句的用法

Excel VBA中for循环语句的用法

vba中五种循环语句的区别

为 vba 使用 for 循环