2014-12-14 2 views
0

Я довольно новичок в VBA и имею ограниченные знания Excel по сравнению с тем, что я читал здесь. У меня проблемы с моими макросами. У меня есть книга из 4 листов. Каждый рабочий лист имеет базовые командные кнопки, которые выдает простой макрос (который составляет минус 1 из одного значения ячейки и добавляет 1 в другой). Там, где у меня возникают проблемы, создается макрокод для 3 кнопок. Этим кнопкам необходимо выдавать похожие команды, однако мне нужно, чтобы они отрегулировали значения ячейки ячейки на всех листах, а не только на активном листе, на котором расположены кнопки.изменение значений в ячейках на нескольких листах с помощью макроса

Эти три конкретные кнопки управления расположены на «листе 4». Ячейки расположены на всех 4 листах. Могу ли я создать макрос (активируется одним нажатием кнопки), который работает на всех четырех листах?

Кнопка 1 - нужно добавить 1 к значению ячейки G10 на листе 4 - но минус 1 из значения ячейки с4 & с7 на листе 2
- и минус 1 из значения ячейки с6 на лист 3.

Другие кнопки - все это точно так же. Надеюсь, это объяснит достаточно. В настоящее время я читаю книги по Excel и VBA, но, будучи занят, это происходит медленно. Любая помощь приветствуется. Заранее спасибо. Морозный :)

+0

Ключом, чтобы отнять оба ответа, является то, что вы должны указать, на котором находится ячейка. Просто определите, что вы меняете, а затем объявите изменение. «Лист (« SHEETNAME »). Диапазон (« A1 »). Значение = ' – peege

+0

Да, вы правы PJ. Я ценю оба ответа, которые я получил. Они оба заставили меня осознать ошибку, которую я делал, а также как правильно достичь того, что я спросил. Я очень уважаю людей, которые помогают и учат других людей, когда это не их работа. Продолжайте хорошую работу. Еще раз спасибо Мороз. – Frosty

ответ

0

Рассмотрим:

Sub buttton1() 
    Dim r1 As Range, r2 As Range, r3 As Range 
    Set r1 = Sheets("Sheet4").Range("G10") 
    Set r2 = Sheets("Sheet2").Range("C4,C7") 
    Set r3 = Sheets("Sheet3").Range("C6") 

    r1 = r1 + 1 
    r2 = r2 - 1 
    r3 = r3 - 1 
End Sub 
+0

Благодарим вас за быстрый ответ ученика Гэри. Сначала я попробовал ваш метод, так как это было похоже на то, что я пытался. Когда я попытался выполнить, я получил - Ошибка «9» «Ошибка выполнения» «вне». – Frosty

+0

@Frosty ** Измените имена листов, чтобы они соответствовали вашим фактическим именам. ** –

+0

Я разработал, где я ошибся с вашим решением. Я использовал имя листа вместо имени кода. Мне пришлось использовать кодовое имя, потому что я уже назвал имя листа таким, каким не нравится Excel. Я изменю его позже. Спасибо за помощь. Будучи новичком, это вызывало множество разочарований. Процессы, которые я создаю, - это попытаться упростить книгу для кого-то другого. Еще раз большое спасибо. – Frosty

1

Вам просто нужно событие для каждой кнопки, то в подпрограмме, имя рабочих таблиц особенно, когда вы манипулируете клетки, содержащиеся. Avoid using select statements и просто внесите необходимые изменения. Я показал несколько разных способов сделать то же самое, чтобы в будущем вы могли адаптироваться в соответствии с вашими потребностями. Иногда вам нужно просто указать диапазон. Иногда вы хотите, чтобы он был создан динамически с помощью другого кода или цикла.

Имейте обработчик события для нажатия кнопки.

Private Sub Button1_Click() 
    Call ChangeVals 
End Sub 

Вам нужно будет позвонить, что к югу от каждого события нажатия кнопки.

Private Sub Button2_Click()  'Repeat for the other two. 
    Call ChangeVals 
End Sub 

Это фактическое суб изменение значений.

Private Sub ChangeVals() 
'Using Range(ColRow) 
    Sheets("Sheet4").Range("G10") = Sheets("Sheet4").Range("G10").Value + 1 

'Using Cells(rowNumber, ColLetter) ----This is good if the column won't change. 
    Sheets("Sheet2").Cells(4,"C") = Sheets("Sheet2").Cells(4,"C").Value - 1 
'Using Cells(rowNumber, ColNumber) ----This is my preferred way, loopable with numbers. 
    Sheets("Sheet2").Cells(7,3) = Sheets("Sheet2").Cells(7,3).Value - 1 
'Lastly 
    Sheets("Sheet3").Range("C6") = Sheets("Sheet3").Range("C6").Value - 1 

End Sub 
+0

Другой предоставленный ответ также будет работать вместо этого дополнительного изменения. Дело в том, что если у вас один и тот же код будет выпущен из многих мест, вы захотите использовать этот код ONCE и просто вызвать его. Если вам нужно изменить «ChangeVals», все будет в одном месте. – peege

+0

Благодарим вас за быстрый ответ. Код, хотя и очень похожий, будет отличаться для каждой из трех кнопок. Итак, если бы я использовал ваш метод PJ, мне не нужно было бы создавать три разных субмастера? – Frosty

+0

Да. Если они все разные, я бы пошел с отдельным событием для каждого. Пропустите вызов их и просто выполните операции, которые вы хотите, в событии кнопки, например, в Gary's Student. Я ушел из вашего заявления: «Остальные кнопки все точно такие». – peege

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