在清理和优化大量VBA代码时,我想到了以前从未有过的东西。在下面的代码块中可以看到,我始终对“静态”单元格使用绝对单元格引用,当在VBA中编写公式时,该单元格必须始终引用相同的地址。我知道在公式中使用绝对引用的重要性,但是是否有必要始终以这种方式引用此类单元格? 例如,(单元格G12的)第一个引用是否为“ .Range(” G12“)。Formula =” = SUM(J16:J“&LastCORow)* $ G $ 12”是否为“ $ G $ 12”公式中使用的单元格值。 我问这是必要还是好的编码实践。
' refresh the formulas
' G8 Materials =SUM(F16:F34)
' G9 Labor =SUM(H16:H34)
' G10 Hours =SUM(I16:I34)
' G11 SubContracts -->depends on G2 (Markup)
' G12 Profit Margin -->depends on G3 (Profit/Overhead)
' set the subcontracts formula and label
If Len(.Range("E11").value) Then ' if the Invoice was set to markup the Sucontracts
.Range("G11").Formula = "=SUM(G16:G" & LastCORow & ")*(1+$G$2)"
.Range("E11").value = "Subcontracts (" & (.Range("G2") * 100) & "% Markup):"
Else
.Range("G11").Formula = "=SUM(G16:G" & LastCORow & ")"
.Range("E11").value = "Subcontracts:"
End If
' G8 Materials
.Range("G8").Formula = "=SUM(F16:F" & LastCORow & ")"
' G9 Labor
.Range("G9").Formula = "=SUM(H16:H" & LastCORow & ")"
' G10 Hours
.Range("G10").Formula = "=SUM(I16:I" & LastCORow & ")"
' G12 Profit Margin -->depends on G3 (Profit/Overhead)
.Range("G12").Formula = "=SUM(J16:J" & LastCORow & ",K4,J8:J10,($G$2*SUM(G16:G" & LastCORow & ")))* $G$3"
' Lastly the job total
.Range("C" & LastCORow + 4).Formula = "=ROUND(SUM(J16:J" & LastCORow & ",K4,J8:J10, ($G$2*SUM(G16:G" & LastCORow & ")))*(1+$G$3),0)"
在前面的代码中,G列中的所有值都用作公式中的计算变量,其地址永不更改。所以简单地说,问题是它们都需要绝对引用吗??
答案 0 :(得分:1)
如果您的引用单元格从不更改地址,那么可以:绝对引用正确。
在公式中使用绝对地址还是相对地址没有唯一答案。这完全取决于您如何使用数据。就您而言,将它们设为绝对是很有意义的。
答案 1 :(得分:0)
我的偏好是让他们保持亲戚关系。这样,如果有人在右边复制一个求和公式,它将对该列求和。
保持相对关系的第二个原因是,如果用户手动创建一个求和公式,它将是相对的。因此,在代码中执行相同操作很有意义。