提问人:FionaFire 提问时间:10/19/2023 最后编辑:Mayukh BhattacharyaFionaFire 更新时间:10/20/2023 访问量:38
为什么 ListObject 使用绝对单元格引用自动填充公式,而不是循环代码?
Why is ListObject autopopulating formula with absolute cell references instead of looping through code?
问:
我有一个命名表(ListObject),我正在尝试使用循环函数用公式填充它。在我的表格中,我在 D 列中有一个价格,在“E:P”列中有一个空白单元格,代表一年中的月份。这些列用于用户输入。
我希望在“Q:AB”列中填充每个月的价格和产品#的乘积,以给出每个月的总成本,如果用户更改了“E:P”列中的任何值,则可以更改此值。例如,“Q2”的输出 vba 公式应为“$D 2*E2”。然后它会为包含价格的每一行计算这个数字(通常为十行,每行是不同的价格)。
我不知道为什么,但我的输出单元格(“Q2:AB10”)都完全相同:“$D$2*$E$2”
我尝试使用范围而不是 cell.addresses,但是(可能是因为我试图循环的变量?我一直收到错误1004。此代码运行,但即使它正在循环,它似乎也没有更改输出。我正在使用的特定代码如下所示:
With Worksheets (i) 'this is defined farther up in the sub
lrow2 = .Range("A" & Rows.Count).End(xlUp).row 'find last row
col = Range("D" & lrow2).Column 'find correct column
'Confirm cells' address reference correct cells
Debug.Print (Cells(lrow2 + 1, 4).Address)
Debug.Print (Cells(lrow2 + 1, col + 1).Address)
Debug.Print (Cells(lrow2 + 1, col + 13).Address)
For c = col To col + 12
Cells(lrow2 + 1, c + 13).Formula = "=" & Cells(lrow2 + 1, 4).Address & "*" & Cells(lrow2 + 1, c + 1).Address
Next c
我需要代码是动态的以接受额外的行(一次 10 行),但列将保持不变,我只是没有足够的经验来知道解决这个问题的最佳方法。
答:
1赞
Shai Rado
10/19/2023
#1
要了解有关属性的更多信息,请参阅此链接:Range.Address
修改:
Cells(lrow2 + 1, c + 13).Formula = "=" & Cells(lrow2 + 1, 4).Address & "*" & Cells(lrow2 + 1, c + 1).Address
跟:
.Cells(lrow2 + 1, c + 13).Formula = "=" & .Cells(lrow2 + 1, 4).Address(False, True, xlA1) & "*" & .Cells(lrow2 + 1, c + 1).Address(False, False, xlA1)
评论
With
.Cells(lrow2 + 1, c + 13)
. Also after
(False, False, xlA1)