2016-12-11 3 views
0

Я пишу макрос, который добавит условные формулы на несколько листов, которые называются Hazard 1/Hazard 2/Hazard 3/Hazard 4. Он настроен на циклическое перемещение по листам , и каждый из листов имеет свои собственные диапазоны имен, в которых изменяется только префикс (H1Ans1Rng, H2Ans1Rng, H3Ans1Rng, H4Ans1Rng и т. д.). Мне нужен код для записи в формуле на каждом листе с правильными именованными диапазонами. У меня есть код, который будет делать это, но он громоздкий, и теперь у меня появляется ошибка «Процедура слишком большая». Формулы, которые дал мне клиент, являются массовыми и гораздо более сложными, чем приведенный ниже пример.Excel VBA Macro для применения условных формул с изменением именных диапазонов

If Wks.Name = "Hazard 1" Then Rng.FormulaR1C1 = "=SUM(H1Ans1Rng+H1Ans2Rng)" 
    If Wks.Name = "Hazard 2" Then Rng.FormulaR1C1 = "=SUM(H2Ans1Rng+H2Ans2Rng)" 
    If Wks.Name = "Hazard 3" Then Rng.FormulaR1C1 = "=SUM(H3Ans1Rng+H3Ans2Rng)" 
    If Wks.Name = "Hazard 4" Then Rng.FormulaR1C1 = "=SUM(H4Ans1Rng+H4Ans2Rng)" 
+0

Есть слишком много способов реагирования на этот вопрос без дополнительной информации. Например, как четыре формулы листа вызывают ошибку «Процедура слишком велика»? Если вы используете VBA, почему вы не можете рассчитать ответы в своем коде? Вам просто нужен строковый построитель для формулы? Почему вы используете свойство R1C1? Есть ли причина, по которой вы не получили именованный диапазон для карты рабочего листа? Если бы вы могли расширить свой вопрос, нам было бы легче удовлетворить ваши потребности. – Ambie

+0

Извините, мой вопрос был самой упрощенной версией моего вопроса, который я мог придумать, сам код массивный. Мне было предложено создать рабочий лист, который по существу выберете количество вкладок, которые нужно будет создать (1-4), затем Hazard 1-4 будет заполняться на основе чисел. Способ, которым я был настроен, работал достаточно хорошо сначала, когда он был небольшим, но они продолжают просить сделать его более сложным, поэтому код стал менее чистым, следовательно, ошибки процедуры. Ответ ниже работал достаточно хорошо, хотя мне сейчас нужно определить тонну переменных для формул. Благодаря! –

ответ

0

С некоторыми слепыми выстрелами я пойду, как следует

Dim hazardNr As String 

hazardNr = Replace(Wks.Name, "Hazard ", "") 
rng.Formula = "=SUM(H" & hazardNr & "Ans1Rng,H" & hazardNr & "Ans2Rng)" & ")" 
+0

Это сработало :) Я никогда не мог заставить его работать с переменными в формуле, но, я думаю, я просто определял их неправильно. Спасибо! –

+0

Добро пожаловать. Хорошая кодировка! – user3598756

Смежные вопросы