Если вы используете Абсолютные ссылки в коде VBA - PullRequest
0 голосов
/ 23 октября 2018

При очистке и оптимизации большого количества кода 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 используются в качестве переменных вычисления в формулах,их адрес никогда не меняется. Таким образом, вопрос в том, нужны ли им все абсолютные ссылки ..?

Ответы [ 2 ]

0 голосов
/ 23 октября 2018

Я предпочитаю оставлять их относительными.Таким образом, если кто-то скопирует формулу суммы справа, он затем суммирует этот столбец.

Вторая причина сохранить его относительным состоит в том, что если пользователь создает формулу суммы вручную, он будет относительным.Поэтому имеет смысл сделать то же самое в коде.

0 голосов
/ 23 октября 2018

Если ваши ссылочные ячейки никогда не меняют адрес, тогда да: абсолютные ссылки верны.

Нет единого ответа относительно того, использовать ли абсолютные или относительные адреса в формулах.Все зависит от того, как вы используете данные.В вашем случае имеет смысл иметь их абсолютными.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...