Вам не нужно offset
, вы можете просто -1 из столбца аргумента Cells
. Вы также пропустили аргумент строки и столбца Cells
, использованный в формуле, окончательный &
, как отмечалось в комментариях.
Кроме того, это действительно плохая идея с использованием ключевых слов или зарезервированных слов в качестве переменных. Некоторые имена защищены, а VBA просто не компилируется/запускается, если определенные слова используются в качестве имен переменных, но для таких вещей, как «Строка», которые используются в других местах в VBA ... он запрашивает проблемы (то есть не рекомендуется/неправильная практика и т. д.), и будет запутывать чтение/отладка и т. д.
Также рассмотрите возможность использования Option Explicit
(если вы еще не находитесь) в верхней части любого модуля кода. Это заставит VBA жаловаться/останавливаться, если вы не определяете все ваших переменных. Это может расстраивать для новичков - но это того стоит в долгосрочной перспективе.
Я переписал ваш код, поверхностно, переименовывая и определяя переменные. Технически вам не нужен двойной (внешний) цикл (c_loop
принимает только одно значение):
Sub RelFormula()
Dim r_loop, c_loop As Integer
For c_loop = 2 To 2
For r_loop = 2 To 6
Cells(r_loop, c_loop).Formula = "=" & Cells(r_loop, c_loop - 1).Value _
& "*" & Worksheets("Sheet1").Range("A1").Value
Next r_loop
Next c_loop
End Sub
Похоже, вам не хватает амперсанд после цитируемого звездочки. – Jeeped
Это была опечатка при задании вопроса, у меня есть амперсанд в моем коде, и он все еще не работает. – Brian
Не рекомендуется использовать переменную с именем, которое дублирует * зарезервированное слово *; в этом случае 'Row'. – Jeeped