我有一个脚本,可以将用户可填充的数据排列到工作表中的项目槽中,同时将相同的数据在另一个工作表中表示为table。
每次生成一个槽时,该槽中的每个单元格都会被命名,然后这些名称通过数组的string传递到函数中,然后将array作为新行插入我的table中。
Dim str_line(5) As String
str_line(0) = rng_sid.Name
str_line(1) = rng_status.Name
str_line(2) = rng_width.Name
str_line(3) = rng_height.Name
str_line(4) = rng_material.Name
str_line(5) = rng_quantity.Name
Call modData.AddTableLine(str_line)
Sub AddTableLine(str_line() As String)
Dim table As ListObject
Dim newRow As ListRow
Set table = Range("tblData").ListObject
Set newRow = table.ListRows.add(AlwaysInsert:=True)
newRow.Range = str_line
End Sub
我面临的问题是,当新行插入到table中时,表格无法识别这些是cell-reference公式,并且仅显示string值。
需要明确的是,我在这里要做的就是让单元格引用正常工作。当我将它们注入到我的表中时,发生了一些事情,导致它们被读取为文本而不是公式。
我尝试了一些不同的方法,例如循环遍历数组中的每个单独的值,除了由于某种原因将其列中的每个单元格变成相同的引用之外,它是有效的。
我也尝试过
Application.CalculateFullRebuild
,但似乎没有任何效果。
另一个奇怪的地方是我如何将单元格名称传递到数组中,但是当它们插入表中时,它们会作为绝对单元格引用传递。
似乎该问题与 table 粘贴字符串而不将其识别为公式有关。我认为我以前没有遇到过这个问题,但我对在 VBA 中使用 listobject 很陌生。
这会起作用 - 因为你只有五个值,所以不应该是性能问题:
Sub AddTableLine(str_line() As String)
Dim table As ListObject
Dim newRow As ListRow
Set table = Range("tblData").ListObject
Set newRow = table.ListRows.Add(AlwaysInsert:=True)
Dim i As Long
For i = 1 To 5
newRow.Range(1, i).Formula = str_line(i)
Next
End Sub