Выбрать дату в календареВыбрать дату в календаре

Страницы: 1
VBA. В переменную не записывается значение из ячейки, Значение из ячейки записывается в Range, но не присваивается переменной
 
Добрый день!

Прошу помочь с проблемой:
Пишу код который должен из исходной таблицы "Workprice" создать таблицу "Dealprice".
Данные в создаваемую таблицу вставляются ссылками из первой, но только если в предыдущей итеррации "Dealprice" в эту ячейку не вносились изменения (в этом случае данные вставляются с архивной таблицы "Dealprice_Old". При этом количество строк и столбцов в исходной таблице может меняться, а подстановка осуществляется через поиск в столбце уникальных значений.

Дошёл до момента когда в созданный шаблон "Dealprice" должны вноситься данные, но в переменную iVal не записываются значения из найденой ячейки, хотя если посмотреть Range, то там во всплывающей подсказке указано верное значение. Подскажите, в чём может быть проблема? Из-за этого не могу продвинуться дальше и посмотреть как будет работать придуманный цикл (не факт что будет  :) ).
Код
    For j = Workprice_Col_1.Column + 1 To Workprice_Col_3.Column - (Workprice_Col_2.Column + 1)       ' определяем диапазон столбцов массива
       For i = 5 To Workprice_LastRow                                                                 ' определеяем диапазон строк массива
           Set iVal = Sheets("Dealprice").Range(Cells(i, WP_Pos.Column))
           Find_Range_DPO = Sheets("Dealprice_Old").Range(Cells(5, DPO_Pos.Column), Cells(DealpriceOld_LastRow, DPO_Pos.Column))  ' определяем диапазон поиска по столбцу "Работа расценка" в архивном прайсе "Сделка"
           Set x = Find_Range_DPO.Find(What:=iVal.Value, LookIn:=xlValues, lookAt:=xlWhole)                 ' находим искомую ячейку на листе Dealprice_Old
           Find_Range_WP = Sheets("Workprice").Range(Cells(5, WP_Pos.Column), Cells(Workprice_LastRow, WP_Pos.Column))  ' определяем диапазон поиска по столбцу "Работа расценка" в прайсе "Работа"
           Set y = Find_Range_WP.Find(What:=iVal.Value, LookIn:=xlValues, lookAt:=xlWhole)                  ' находим искомую ячейку на листе Workprice
            If x.Offset(, j - DPO_Pos).Value <> "" And Not x.Offset(, j - DPO_Pos).Formula Like "=Workprice!*" Then ' смещаемся в нужную колонку и проверяем что ячейка не пустая и не содержит ссылку на Workprice
               Sheets("Dealprice").Cells(i, j) = x.Value                                                     ' вставляем значение в текущую ячейку на листе Dealprice
            ElseIf y.Offset(, j - WP_Pos).Value = "" Then                                                 ' проверяем является ли искомая ячейка на листе Workprice пустой
               Sheets("Dealprice").Cells(i, j) = ""                                                       ' ставим пустое значение в ячейке
            Else
               y.Copy                                                                                     ' копируем найденую ячейку на листе Workprice
               Sheets("Dealprice").Cells(i, j).Paste Link:=True                                           ' вставляем ссылку на ячейку с листа Workprice
            End If
           i = Workprice_LastRow + 1                                                      ' завершаем цикл строк если достигли последней
       Next i
           j = (Workprice_Col_3.Column - Workprice_Col_2.Column) + 1                      ' завершаем цикл столбцов если достигли последнего
    Next j
Файл прилагаю.
Прошу не судить строго, я с VBA на "Вы"  :oops:  
Изменено: Денис Крицков - 30.07.2024 18:17:37
[ Закрыто] Вопрос: Как записать математическое выражение (формулу) из ячейки в макрос VBA?, Как записать выражение типа "=15/2*1,2" в переменную макроса, для дальнейшей модернизации формулы?
 
Добрый день!
Может кто-то сталкивался с подобной задачей и подскажет как её можно реализовать:

Необходимо в ячейку содержащую значение/формулу или математическое выражение добавить множитель на определённый коэффициент, при этом всё что ранее находилось в этой ячейке нужно поместить в скобки (кроме знака равно), но саму формулу оставить неизменной.
Например: в ячейке А1 содержится выражение "=15/2*1,2", после выполнения команды в этой ячейке должна получиться запись "=(15/2*1,2)*K", где K - имя именованной ячейки в этом же файле.

Поиск в интернете не принёс результатов, очень много примеров, как макросом вписать формулу в ячейку или как в соседнюю ячейку записать подправленную формулу из первой. А как записать формулу формата Excel в макрос и затем перезаписать её в этой же ячейке, примеров не нашёл...

Пока я дошёл до следующей формулы:
Код
Dim xPrice
Set xPrice = ActiveCell
  ActiveCell.Formula = "=(" & xPrice & ")*курсЕ" 

В данном случае цена в активной ячейке домножается на курс Евро (значение которого указано в именованной ячейке курсЕ)

Но формула работает не совсем корректно...

1) При попытке присвоить переменной xPrice атрибут String, в переменную перестаёт записываться содержимое ActiveCell...

2) Если в ячейку записано "=10/2", то макрос срабатывает, но переменной xPrice присваивается значение, а не формула и в итоге вместо требуемой строки в формуле "=(10/2)*курсЕ", записывается "=(5)*курсЕ", т. е. теряются необходимые данные.

P. S. Почему-то данная формула перестала работать, если переменной xPrice присваивается дробное число. Хотя изначально макрос выполнялся.

В дальнейшем скрипт планируется нарастить проверками ячейки на содержимое. Например, чтобы случайно не помножить 2 раза на курс Евро или не брать выражение в скобки если оно уже в них.

Макросу планируется присвоить комбинацию горячих клавиш, при нажатии которой в активную ячейку добавлялся бы множитель.

Спасибо!

Страницы: 1
Наверх