Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Не удаётся подставить значение переменной/ячейки в формулу - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не удаётся подставить значение переменной/ячейки в формулу (Макросы/Sub)
Не удаётся подставить значение переменной/ячейки в формулу
StoTisteg Дата: Четверг, 31.01.2019, 12:58 | Сообщение № 1
Группа: Авторы
Ранг: Старожил
Сообщений: 1157
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Задача следующая. Есть книга, листы которой называются как товары (в примере — лист Яблоки) с наименованиями и ценами и лист Скидки с товарами (которые названия листов) и ценами. Нужно подтянуть из него скидку и заменить цену на формулу типа
Код
=84.26*(1-Скидки!R2C2)
где 84.26 — значение, которое было в ячейке до того. Решение вроде бы простое:[vba]
Код
Sub test()

   Dim cell As Range
   
   Set cell = Worksheets(2).Columns(1).Find(Worksheets(1).Name).Offset(, 1)
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & Worksheets(1).Cells(2, 2).Value & "*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"

End Sub
[/vba]Проблема в том, что оно вываливается с 1004 ошибкой. Причём проблема воспроизводится не на всех настройках и версиях — дома на 2007 вылечилось с помощью FormulaR1C1Local, на работе на 2010 не лечится совсем. Дело не в неправильном указании адреса ячейки со скидкой —[vba]
Код
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=84.26*(1-Скидки!R2C2)"
[/vba] отрабатывает нормально, [vba]
Код
Worksheets(1).Cells(2, 2).FormulaR1C1 = "=84.26*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"
[/vba] тоже. И не в прямом указании значения ячейки — [vba]
Код
   price = Worksheets(1).Cells(2, 2).Value
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & price & "*(1-Скидки!R2C2)"
[/vba] не помогает. Комбинирование R1C1 и Local, как я уже указал, помогает не везде...
[p.s.]Всяческое переформатирование, начиная от CSng и заканчивая разборкой на запчасти Split'ом с последующим перевычислением, тоже. Val помогает, но копейки-то важны.[/p.s.]
К сообщению приложен файл: SubstErr.xlsm(15.6 Kb)


Интуитивно понятный код - это когда интуитивно понятно, что это код.

Сообщение отредактировал StoTisteg - Четверг, 31.01.2019, 13:04
 
Ответить
СообщениеЗадача следующая. Есть книга, листы которой называются как товары (в примере — лист Яблоки) с наименованиями и ценами и лист Скидки с товарами (которые названия листов) и ценами. Нужно подтянуть из него скидку и заменить цену на формулу типа
Код
=84.26*(1-Скидки!R2C2)
где 84.26 — значение, которое было в ячейке до того. Решение вроде бы простое:[vba]
Код
Sub test()

   Dim cell As Range
   
   Set cell = Worksheets(2).Columns(1).Find(Worksheets(1).Name).Offset(, 1)
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & Worksheets(1).Cells(2, 2).Value & "*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"

End Sub
[/vba]Проблема в том, что оно вываливается с 1004 ошибкой. Причём проблема воспроизводится не на всех настройках и версиях — дома на 2007 вылечилось с помощью FormulaR1C1Local, на работе на 2010 не лечится совсем. Дело не в неправильном указании адреса ячейки со скидкой —[vba]
Код
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=84.26*(1-Скидки!R2C2)"
[/vba] отрабатывает нормально, [vba]
Код
Worksheets(1).Cells(2, 2).FormulaR1C1 = "=84.26*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"
[/vba] тоже. И не в прямом указании значения ячейки — [vba]
Код
   price = Worksheets(1).Cells(2, 2).Value
   Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & price & "*(1-Скидки!R2C2)"
[/vba] не помогает. Комбинирование R1C1 и Local, как я уже указал, помогает не везде...
[p.s.]Всяческое переформатирование, начиная от CSng и заканчивая разборкой на запчасти Split'ом с последующим перевычислением, тоже. Val помогает, но копейки-то важны.[/p.s.]

Автор - StoTisteg
Дата добавления - 31.01.2019 в 12:58
_Boroda_ Дата: Четверг, 31.01.2019, 13:08 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14861
Репутация: 5879 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Запятую нужно заменить на точку
[vba]
Код
Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & Replace(Worksheets(1).Cells(2, 2).Value, ",", ".") & "*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"
[/vba]

Возможно (не знаю, как в реальном файле нужно) понадобится еще округлить до 2-х знаков


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеЗапятую нужно заменить на точку
[vba]
Код
Worksheets(1).Cells(2, 2).FormulaR1C1 = "=" & Replace(Worksheets(1).Cells(2, 2).Value, ",", ".") & "*(1-Скидки!R" & cell.Row & "C" & cell.Column & ")"
[/vba]

Возможно (не знаю, как в реальном файле нужно) понадобится еще округлить до 2-х знаков

Автор - _Boroda_
Дата добавления - 31.01.2019 в 13:08
StoTisteg Дата: Четверг, 31.01.2019, 13:22 | Сообщение № 3
Группа: Авторы
Ранг: Старожил
Сообщений: 1157
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, мне приходила в голову эта мысль. Проблема в том, что неизвестно, с какими настройками придётся макросу столкнуться, не окажется ли, что Эксель на какой-то машине захочет обратного? Хотя всегда можно же OERRN прикрутить.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение_Boroda_, мне приходила в голову эта мысль. Проблема в том, что неизвестно, с какими настройками придётся макросу столкнуться, не окажется ли, что Эксель на какой-то машине захочет обратного? Хотя всегда можно же OERRN прикрутить.

Автор - StoTisteg
Дата добавления - 31.01.2019 в 13:22
_Boroda_ Дата: Четверг, 31.01.2019, 14:01 | Сообщение № 4
Группа: Модераторы
Ранг: Местный житель
Сообщений: 14861
Репутация: 5879 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Проблема в том, что неизвестно, с какими настройками придётся макросу столкнуться, не окажется ли, что Эксель на какой-то машине захочет обратного?

Это как? В VBA точка, в Excel если точка, то ничего не заменится, если запятая, то она заменится на точку.
Если не запятая и не точка (а что тогда? ну ладно, допустим), то так например
[vba]
Код
Mid(1 / 2, 2, 1)
[/vba]
[vba]
Код
Mid(0.1, 2, 1)
[/vba]
Или программно искать системный разделитель, но это тот еще геморрой - международные параметры, системные, галочка использовать / не использовать. Ну нафиг


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
Сообщение
Проблема в том, что неизвестно, с какими настройками придётся макросу столкнуться, не окажется ли, что Эксель на какой-то машине захочет обратного?

Это как? В VBA точка, в Excel если точка, то ничего не заменится, если запятая, то она заменится на точку.
Если не запятая и не точка (а что тогда? ну ладно, допустим), то так например
[vba]
Код
Mid(1 / 2, 2, 1)
[/vba]
[vba]
Код
Mid(0.1, 2, 1)
[/vba]
Или программно искать системный разделитель, но это тот еще геморрой - международные параметры, системные, галочка использовать / не использовать. Ну нафиг

Автор - _Boroda_
Дата добавления - 31.01.2019 в 14:01
StoTisteg Дата: Четверг, 31.01.2019, 14:43 | Сообщение № 5
Группа: Авторы
Ранг: Старожил
Сообщений: 1157
Репутация: 103 ±
Замечаний: 0% ±

Excel 2010
Это как? В VBA точка, в Excel если точка, то ничего не заменится, если запятая, то она заменится на точку.

Вот как раз в этом я и не был полностью уверен, спасибо.


Интуитивно понятный код - это когда интуитивно понятно, что это код.
 
Ответить
Сообщение
Это как? В VBA точка, в Excel если точка, то ничего не заменится, если запятая, то она заменится на точку.

Вот как раз в этом я и не был полностью уверен, спасибо.

Автор - StoTisteg
Дата добавления - 31.01.2019 в 14:43
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Не удаётся подставить значение переменной/ячейки в формулу (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс цитирования
© 2010-2019 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!