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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 30.01.2022, 14:17   #1
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию работа макроса для каждого листа

Ребята Здравствуйте! подсобите с таким вопросом, есть макрос:
Код:
Private Sub Worksheet_Change(ByVal Target As Range)
Set p = Sheets("db").Range("Изделие1")
    If Target.Cells.Count > 1 Then Exit Sub
    If IsEmpty(Target) Then Exit Sub
    If Not Intersect(Target, Range("G3:G1000")) Is Nothing Then
    If WorksheetFunction.CountIf(p, Target) = 0 Then
    r = MsgBox("Добавленно", vbYesNo)
    If r = vbYes Then p.Cells(p.Rows.Count + 1) = Target
End If
End If
End Sub
вопрос: дабы не плодить его на каждом листе (пробовал в модуль занести не работает) может что то дописать что бы работал из модуля этот макрос? Заранее спасибо!
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 30.01.2022, 14:54   #2
o5a
Пользователь
 
Регистрация: 27.01.2022
Сообщений: 11
По умолчанию

Заменить Private на Public.
o5a вне форума Ответить с цитированием
Старый 30.01.2022, 15:00   #3
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

o5a, выдал ошибку на строку
Код:
If Target.Cells.Count > 1 Then Exit Sub
вынес ее на лист
Код:
Worksheet_Change
ни чего не поменялось что публично что без нее (пробовал) выдает те же ошибки
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 30.01.2022, 15:39   #4
o5a
Пользователь
 
Регистрация: 27.01.2022
Сообщений: 11
По умолчанию

Насколько мне известно процедуры типа Worksheet_Change пишутся только в модулях листов поскольку вызываются как реакция на событие на конкретном листе, здесь - на изменение ячеек. Можно содержимое вынести в отдельную процедуру и её вызывать из Worksheet_Change...
o5a вне форума Ответить с цитированием
Старый 30.01.2022, 15:59   #5
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

Цитата:
Сообщение от o5a Посмотреть сообщение
вынести в отдельную
можно на примере показать?
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 30.01.2022, 17:54   #6
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

в модуль ЭтаКнига одну процедуру (чтобы не плодить)

Код:
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
   ...
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.01.2022, 18:15   #7
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

IgorGO, правильно ли я понимаю в таком случает этот код
Код:
  If Not Intersect(Target, Range("G3:G1000")) Is Nothing Then
будет распростроняться на все листы в книге?
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 30.01.2022, 19:21   #8
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

Target - для всех
Range("G3:G1000") - для активного
а просто попробовать что получится вам религия не позволяет?
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума Ответить с цитированием
Старый 30.01.2022, 19:23   #9
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

IgorGO, принято, СПАСИБО!
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!
DMITRIY_78 вне форума Ответить с цитированием
Старый 30.01.2022, 20:10   #10
DMITRIY_78
Форумчанин
 
Регистрация: 11.12.2018
Сообщений: 202
По умолчанию

Для чайников! таких как я
Код:
Public Static Function список(ByVal Target As Range)
Set Sh = ThisWorkbook.Worksheets("db")
Set p = Sh.Range("Изделие1")
    If Target.Cells.Count > 1 Then Exit Function
    If IsEmpty(Target) Then Exit Function
    If Not Intersect(Target, Range("G3:G1000")) Is Nothing Then
    If WorksheetFunction.CountIf(p, Target) = 0 Then
    r = MsgBox("Добавленно: " & Target, vbInformation + vbYesNo, "ÈИнформация")
    If r = vbYes Then p.Cells(p.Rows.Count + 1) = Target
End If
End If
End Function
вызвал ее
Код:
Run список(ByVal Target)
Что нас не убивает, то делает нас сильными!
Всё гениальное просто, всё простое гениально!

Последний раз редактировалось DMITRIY_78; 30.01.2022 в 20:33. Причина: поправил код
DMITRIY_78 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
копирование содержимого каждого листа в книги в одну таблицу skapitan Microsoft Office Excel 3 17.12.2018 18:39
отличная работа для каждого Chernov_vova Фриланс 2 22.05.2012 12:43
Свой код для каждого листа Brucebelg Microsoft Office Excel 11 26.01.2012 17:21
Цикл для каждого листа. Richard123 Microsoft Office Excel 3 24.01.2011 16:11
посчитать значение по каждой статье за определенный период для каждого листа Graver Microsoft Office Excel 5 04.12.2009 01:31