Страницы: 1
RSS
Выделение констант, замена на формулы, расчет и вывод как константы VBA
 
Добрый день.
Есть макрос:
Код
Sub newww()
With Range("rere").Select
Selection.SpecialCells(xlCellTypeConstants, 1).Select
Selection.Formula = "формула записанная в редакоторе"
Selection.Calculate
Selection.Value = .Value
End With
End Sub


Я этим кодом пытаюсь в диапазоне "RERE" выделить все ячейки в которых константы.

В них прописать формулу .

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

Постоянно выскакивает ошибки то 424, то 1004

Сам в VBA не сильно силен, по этому все это ваяю сам что то через запись, а что то из интернета беру.

Помогите пожалуйста разобраться, что я делаю не так(

 
Код
With Range("rere").SpecialCells(xlCellTypeConstants)
    .Formula = "формула записанная в редакоторе"
    .Value = .Value
End With
Согласие есть продукт при полном непротивлении сторон
 
coreyr, если в формуле присутствуют относительные ссылки, она обязательно должна быть в стиле R1C1, иначе ссылки собьются.
Выделите ячейку с отлаженной формулой, в окне Immediate наберите
Код
?activecell.formular1c1
, Enter. Перенесите формулу в код, который должен быть
Код
 .FormulaR1C1 = "формула из окна Immediate"
Если в формуле есть текстовые константы в кавычках, удвойте кавычки в соотв. с синтаксисом строк VBA.
 
Цитата
Казанский написал:
Выделите ячейку с отлаженной формулой, в окне Immediate наберитеКод ? 1?activecell.formular1c1, Enter. Перенесите формулу в код, который должен бытьКод ? 1.FormulaR1C1 = "формула из окна Immediate"Если в формуле есть текстовые константы в кавычках, удвойте кавычки в соотв. с синтаксисом строк VBA.
Спасибо, сделал как вы сказали и формулу которая получилась выставил в код который прислал Sanja, (отдельное спасибо ему)
Код заполняет верно только первые 2 строки, а дальше значение Н/Д
Если убрать из кода
Цитата
Sanja написал:
.Value = .Value
То формулы вставляются верно и значения рассчитываются верно!

На данный момент код выглядит вот так:
Код
With Range("rere").SpecialCells(xlCellTypeConstants)
    .FormulaR1C1 = "=INDEX(INDIRECT(VLOOKUP('факт по форме общества'!R8C3,'служебный(не изменять)'!R1C1:R5C2,2,FALSE)),MATCH(CONCATENATE(RC1,""*""),фактпредпер1,0))"
    .Value = .Value
End With
Изменено: coreyr - 14.09.2018 16:01:17
 
И еще. Если в диапазоне 'rere' не будет ни одной ячейки с константой, то тоже код вылетит с ошибкой
Согласие есть продукт при полном непротивлении сторон
 
Цитата
Sanja написал:
И еще. Если в диапазоне 'rere' не будет ни одной ячейки с константой, то тоже код вылетит с ошибкой
Спасибо. Обратил на это внимание уже, но это не принципиально.
Тут вопрос в том что .Value = .Value как то не правильно все переносит в значения и появляются Н/Д. в то время как без нее за место констант попадают формулы и все верно рассчитывают.
 
coreyr, с несвязным диапазоном .Value = .Value не работает. Нужно перебрать области
Код
With Range("rere").SpecialCells(xlCellTypeConstants)
  .FormulaR1C1 = "=INDEX(INDIRECT(VLOOKUP('факт по форме общества'!R8C3,'служебный(не изменять)'!R1C1:R5C2,2,FALSE)),MATCH(CONCATENATE(RC1,""*""),фактпредпер1,0))"
  For Each a In .Areas
    a.Value = a.Value
  Next
End With
 
Казанский, Спасибо огромное! Все работает как надо!
Страницы: 1
Наверх