Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 14.03.2010, 10:49   #1
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию Запуск макроса на листе, который выполняется в других листах

Помогите, пожалуйста, разобраться с запуском макроса.
Макрос записан вручную.
В книге три рабочих листа.
На первом листе изображение (вместо кнопки), к которому привязан макрос. Необходимо, чтобы макрос выполнялся только на втором и третьем листах.
Спасибо за возможную помощь.
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 10:57   #2
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Грузите файл для лучшего понимания задачи.
Я понял,что кнопку жмут на 1 листе,а выполнение касается 2 и 3 листа
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 14.03.2010, 11:03   #3
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Да, именно так, doober.
Спасибо за оперативность. Готовлю файл
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 11:05   #4
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Для применения макроса на других листах, используйте либо их активацию, либо(что лучше и быстрее и профессиональней) - конструкцию With ... End With.

Код:
Dim i As integer
For i = 2 to 3 ' цикл от 2 листа до третьего
With Sheets(i)
.Range(.Cells(1,1),.Cells(10,1)).value = "1"
End With
Next i
Обращаю внимание на обязательное проставление точек перед .Range и .Cells. Это очень Важно!
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 14.03.2010, 11:21   #5
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Спасибо. Пробую. Но файл прикладываю.
The_Prist, Как быть, если листы не 1,2,3, а их количество меняется.
И как будет выглядеть макрос в целом.
Спасибо.
Вложения
Тип файла: rar Просьба.rar (31.9 Кб, 32 просмотров)
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 11:34   #6
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Вот код всего Вашего макроса
Код:
Sub Макрос2()
    Dim i As Integer
    For i = 2 To 3    ' цикл от 2 листа до третьего
        With Sheets(i)
            .Range("J2:J16").FormulaR1C1 = "=RC[-3]-RC[-3]"
        End With
    Next i
End Sub
А про имена листов - значения не имеет. В коде берется не имя листа, а его индекс. Т.е. номер листа в книге по порядку. Если листо будет 10, то просто продляете цикл
Код:
For i = 2 To 10 'цикл от 2 листа до десятого
Попробуйте - поймете.

P.S. Формула не совсем ясна - "=RC[-3]-RC[-3]" - какой результат она вернет? Только нуль, т.к. Вы вычитаете ячейку из самой себя. Наверное, что-то другое должно быть, хотя бы - "=RC[-3]-RC[-2]"
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 14.03.2010 в 11:41.
The_Prist вне форума Ответить с цитированием
Старый 14.03.2010, 11:42   #7
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Спасибо, The_Prist.
Логично, но может быть непонято сторонним пользователем.
Дело в том, что число листов выбирается тем, кто работает. Сегодня, например, я открываю в "листы" 3 файла; завтра 5. (Прим. я использую макрос, который соединяет файлы-книги в листы).
Можно ли указать с запасом, например 10, зная, что число листов будет не больше.
И не глючит ли, когда открыто 3 листа. Спасибо.
** сам сейчас попробую.
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 11:52   #8
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

К тому же мне необходимо просчитать не по формуле, а по записаному макросу - расчет будет не от 2:16, а значительно больше и с повторяющимися действиями.
.Range("J2:J16").FormulaR1C1 = "=RC[-3]-RC[-3]"
Помогите, пожалуйста, вставить в тело записанный макрос.
Спасибо
** может через переменную листа
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 11:55   #9
as-is
Пользователь
 
Регистрация: 09.02.2010
Сообщений: 41
По умолчанию

Действительно, The_Prist, формула возвращает нули. А записанный макрос (в приложенном файле) корректирует значения - вычитает от каждого последующего самое первое значение.
Спасибо.
as-is вне форума Ответить с цитированием
Старый 14.03.2010, 13:08   #10
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Код:
Sub Макрос2()
    Dim i As Integer
    For i = 2 To Sheets.Count  ' цикл от 2 листа до последнего
        With Sheets(i)
            'здесь то, что необходимо выполнить на всех листах, начиная от второго
        End With
    Next i
End Sub
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как указать область на листе для макроса ru3000 Microsoft Office Excel 2 07.08.2009 23:05
перевод String to PAnsiChar (Запуск других приложений) ke6ko Общие вопросы Delphi 2 09.07.2009 20:47
Как сделать чтобы двумерный массив который создается в функции можно было использовать в других функциях Olya90 Помощь студентам 4 20.04.2009 18:39
Запуск макроса с параметрами из другого макроса Saladin Microsoft Office Excel 2 19.01.2009 09:43
Выполнение макроса во всех листах Bu$ter Microsoft Office Excel 18 14.11.2008 14:34