Новости:

Теперь на форум можно залогиниться / зарегистрироваться с помощью ВКонтакте. Уже существующие пользователи могут связать свою учетную запись с аккаунтом ВКонтакте одним кликом в профиле пользователя http://forum.msexcel.ru/index.php?action=profile;area=account

Главное меню

FormulaLocal и FormulaR1C1, в чем проблема?

Автор AlWin, 10.12.2013, 09:41

« назад - далее »

AlWin

Помогите, пожалуйста разобраться. Почему
ActiveCell.FormulaLocal = "=ОКРУГЛ(A" & stroka & "*" & "(1+" & ndsLoc & ")" & ";2)"  - работает, а
ActiveCell.FormulaR1C1 = "=ROUND(R[-1]C*" & "(1+" & ndsLoc & ")" & ",2)"  - выдает ошибку

nilem

Кажется, вот так работает:
ActiveCell.FormulaR1C1 = "=ROUND(R[-1]C*(1+" & Replace(ndsLoc.Value, ",", ".") & "),2)"

AlWin

nilem
Спасибо, получается виноваты региональные настройки. Их никак не обойти?
Уловка в виде rr = ndsLoc.Address тоже не работает, возможно потому что возвращает адрес не в стиле R1C1
В принципе хотелось просто сослаться в формуле на ячейку R4C:
застолбить номер строки переменной : strNds = Cells(4,1) и присвоить требуемой ячейке  формулу:
ActiveCell.FormulaR1C1 = "=ROUND(R[-1]C*(1+R" & strNds & "C),2)"
Но VBA сильно ругается. Или региональные настройки для последней формулы ни при чем, а все дело в незнании синтаксиса?

kuklp

Цитата: AlWin от 10.12.2013, 11:37
Уловка в виде rr = ndsLoc.Address тоже не работает, возможно потому что возвращает адрес не в стиле R1C1
Во-первых Address может в любом стиле, какой закажете. Не ленитесь читать справку. И потом так ли уж необходима  FormulaR1C1? Используйте просто Formula. Ей пофиг, в каком стиле адреса.
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

AlWin

Цитата: KuklP от 10.12.2013, 11:49
Используйте просто Formula. Ей пофиг, в каком стиле адреса.
код: ActiveCell.Formula = "=ROUND(R[-1]C*(1+" & rr & "),2)"

rr = ndsLoc.Address(, , xlR1C1) - работает
rr = ndsLoc.Address                - не работает

И все-таки - в чем ошибка в строке  ActiveCell.FormulaR1C1 = "=ROUND(R[-1]C*(1+R" & strNds & "C),2)" ?

kuklp

#5
Цитироватькод: ActiveCell.Formula = "=ROUND(R[-1]C*(1+" & rr & "),2)"

rr = ndsLoc.Address(, , xlR1C1) - работает
rr = ndsLoc.Address                - не работает
А ничего, что во втором случае у Вас "Смешались в кучу кони, люди..."? Вы в одной формуле пытаетесь смешать два разных стиля адресов(ссылок).  :o Конечно работать не будет. Чтоб работало, надо:
ActiveCell.Formula = "=ROUND(" & ActiveCell.offset(-1).address & "*(1+" & rr & "),2)"
Цитироватьзастолбить номер строки переменной : strNds = Cells(4,1) и присвоить требуемой ячейке  формулу:...
М-да... Вы б хоть в отладчике посмотрели, чему у Вас при таком присвоении будет равна strNds. С чего вы решили что это будет номер строки? Вообще непредсказуемо, либо диапазону, либо его значению. В зависимости от типа переменной. Чтоб присвоить номер строки, надо присваивать так:
strNds = Cells(4,1).row И будет она всегда равна 4, если только вместо Cells(4,1) не будет стоять переменная типа range. :)
Я, как всегда, чертовски адекватен... Email: pilipnikop@yandex.ua WM Z206653985942, R334086032478, U238399322728, E332314026771

AlWin

".row" - это даже не ошибка, а усталость. И ну да, смешалось... Пишу про одно, а сам думаю о том с чего все началось - про неудачные попытки заменить ссылку на ячейку переменной с адресом искомой ячейки.
Спасибо всем уделившим мне свое время.