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 循环中命名表的主要内容,如果未能解决你的问题,请参考以下文章