Домашняя страница Undo Do New Save Карта сайта Обратная связь Поиск по форуму
МИР MS EXCEL - Гость.xls

Вход

Регистрация

Напомнить пароль

 

= Мир MS Excel/Конфликт двух макросов - Мир MS Excel

Старая форма входа
  • Страница 1 из 1
  • 1
Модератор форума: китин, _Boroda_  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Конфликт двух макросов (Макросы/Sub)
Конфликт двух макросов
plohish Дата: Суббота, 28.02.2015, 08:06 | Сообщение № 1
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Здравствуйте! Подскажите что нужно дописать чтоб не было конфликта двух обработчиков событий на одном листе

[vba]
Код
Dim Coord_Selection As Boolean 'глобальная переменная для вкл/выкл выделения
[/vba]

[vba]
Код
Sub Selection_On() 'макрос включения выделения
Coord_Selection = True
End Sub
[/vba]

[vba]
Код
Sub Selection_Off() 'макрос выключения выделения
Coord_Selection = False
End Sub
[/vba]

[vba]
Код
'основная процедура, выполняющая выделение
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range

If Target.Cells.Count > 1 Then Exit Sub 'если выделено больше 1 ячейки - выходим
If Coord_Selection = False Then Exit Sub 'если выделение выключено - выходим

Application.ScreenUpdating = False
Set WorkRange = Range("A1:AU10000") 'адрес рабочего диапазона, в пределах которого видно выделение
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select 'формируем крестообразный диапазон и выделяем
Target.Activate
End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
rw = Target.Row
If Selection.Address = "$A$" & rw & ":$M$" & rw Then
With Sheets("Для Бухг")
Selection.copy .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
Beep
End With
End If
End If
End Sub
[/vba]


Спасибки

Сообщение отредактировал Pelena - Суббота, 28.02.2015, 10:28
 
Ответить
СообщениеЗдравствуйте! Подскажите что нужно дописать чтоб не было конфликта двух обработчиков событий на одном листе

[vba]
Код
Dim Coord_Selection As Boolean 'глобальная переменная для вкл/выкл выделения
[/vba]

[vba]
Код
Sub Selection_On() 'макрос включения выделения
Coord_Selection = True
End Sub
[/vba]

[vba]
Код
Sub Selection_Off() 'макрос выключения выделения
Coord_Selection = False
End Sub
[/vba]

[vba]
Код
'основная процедура, выполняющая выделение
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim WorkRange As Range

If Target.Cells.Count > 1 Then Exit Sub 'если выделено больше 1 ячейки - выходим
If Coord_Selection = False Then Exit Sub 'если выделение выключено - выходим

Application.ScreenUpdating = False
Set WorkRange = Range("A1:AU10000") 'адрес рабочего диапазона, в пределах которого видно выделение
Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select 'формируем крестообразный диапазон и выделяем
Target.Activate
End Sub
[/vba]
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Not Intersect(Target, Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
rw = Target.Row
If Selection.Address = "$A$" & rw & ":$M$" & rw Then
With Sheets("Для Бухг")
Selection.copy .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
Beep
End With
End If
End If
End Sub
[/vba]

Автор - plohish
Дата добавления - 28.02.2015 в 08:06
Manyasha Дата: Суббота, 28.02.2015, 08:52 | Сообщение № 2
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
plohish, поместите все в один обработчик. И уберите [vba]
Код
If Target.Cells.Count > 1 Then Exit Sub
[/vba] вместо этого напишите
[vba]
Код
If Target.Cells.Count = 1 Then   
' первый блок
End If
[/vba]
C Вашим примером смогу подробнее написать.

[p.s.]Пожалуйста, оформите Ваш код! Мне пришлось копировать его в редактор VBA, чтобы прочитать.


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 28.02.2015, 08:52
 
Ответить
Сообщениеplohish, поместите все в один обработчик. И уберите [vba]
Код
If Target.Cells.Count > 1 Then Exit Sub
[/vba] вместо этого напишите
[vba]
Код
If Target.Cells.Count = 1 Then   
' первый блок
End If
[/vba]
C Вашим примером смогу подробнее написать.

[p.s.]Пожалуйста, оформите Ваш код! Мне пришлось копировать его в редактор VBA, чтобы прочитать.

Автор - Manyasha
Дата добавления - 28.02.2015 в 08:52
plohish Дата: Суббота, 28.02.2015, 09:11 | Сообщение № 3
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Загоняю файл примера один макрос делает удобную сетку ввода второй копирует строку на другой лист
К сообщению приложен файл: 1.xlsx.xlsm (12.2 Kb)


Спасибки
 
Ответить
СообщениеЗагоняю файл примера один макрос делает удобную сетку ввода второй копирует строку на другой лист

Автор - plohish
Дата добавления - 28.02.2015 в 09:11
plohish Дата: Суббота, 28.02.2015, 09:16 | Сообщение № 4
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Не работает снова пишет Ambiguous name detected Worksheet Selection Change


Спасибки
 
Ответить
СообщениеНе работает снова пишет Ambiguous name detected Worksheet Selection Change

Автор - plohish
Дата добавления - 28.02.2015 в 09:16
Manyasha Дата: Суббота, 28.02.2015, 09:51 | Сообщение № 5
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
[vba]
Код
If Coord_Selection = False Then Exit Sub
[/vba]Вы не присваиваете значение этой переменной, она всегда будет False! (убрала из кода эту строчку, если будет нужна - добавьте сами)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
должен быть один.
Полный код в файле.
К сообщению приложен файл: 111.xlsm (16.7 Kb)


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщение[vba]
Код
If Coord_Selection = False Then Exit Sub
[/vba]Вы не присваиваете значение этой переменной, она всегда будет False! (убрала из кода эту строчку, если будет нужна - добавьте сами)
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
должен быть один.
Полный код в файле.

Автор - Manyasha
Дата добавления - 28.02.2015 в 09:51
plohish Дата: Суббота, 28.02.2015, 12:06 | Сообщение № 6
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
не получается пишет Cant't find proect or library


Спасибки
 
Ответить
Сообщениене получается пишет Cant't find proect or library

Автор - plohish
Дата добавления - 28.02.2015 в 12:06
Manyasha Дата: Суббота, 28.02.2015, 12:23 | Сообщение № 7
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
plohish, пишите подробнее: в моем файле из предыдущего сообщения или Вы уже успели что-то изменить? На какой строчке?

[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim WorkRange As Range
     Application.ScreenUpdating = False
     If Target.Cells.Count = 1 Then
         Application.EnableEvents = False
         Set WorkRange = Range("A1:AU10000")
         Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select
         Target.Activate
         Application.EnableEvents = True
     End If
      
     If Not Intersect(Target, Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
         rw = Target.Row
         If Selection.Address = "$A$" & rw & ":$M$" & rw Then
             Application.EnableEvents = False
             With Sheets(1)
                 Selection.Copy .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
                 Beep
             End With
             Application.EnableEvents = True
         End If
     End If
End Sub
[/vba]


ЯД: 410013299366744 WM: R193491431804

Сообщение отредактировал Manyasha - Суббота, 28.02.2015, 12:24
 
Ответить
Сообщениеplohish, пишите подробнее: в моем файле из предыдущего сообщения или Вы уже успели что-то изменить? На какой строчке?

[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     Dim WorkRange As Range
     Application.ScreenUpdating = False
     If Target.Cells.Count = 1 Then
         Application.EnableEvents = False
         Set WorkRange = Range("A1:AU10000")
         Intersect(WorkRange, Union(Target.EntireColumn, Target.EntireRow)).Select
         Target.Activate
         Application.EnableEvents = True
     End If
      
     If Not Intersect(Target, Range("A1:E" & Cells(Rows.Count, 1).End(xlUp).Row)) Is Nothing Then
         rw = Target.Row
         If Selection.Address = "$A$" & rw & ":$M$" & rw Then
             Application.EnableEvents = False
             With Sheets(1)
                 Selection.Copy .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1)
                 Beep
             End With
             Application.EnableEvents = True
         End If
     End If
End Sub
[/vba]

Автор - Manyasha
Дата добавления - 28.02.2015 в 12:23
plohish Дата: Понедельник, 02.03.2015, 06:47 | Сообщение № 8
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Не получается, картинка в файле.


Спасибки
 
Ответить
СообщениеНе получается, картинка в файле.

Автор - plohish
Дата добавления - 02.03.2015 в 06:47
plohish Дата: Понедельник, 02.03.2015, 06:47 | Сообщение № 9
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
вот
К сообщению приложен файл: 9345793.jpg (37.9 Kb)


Спасибки
 
Ответить
Сообщениевот

Автор - plohish
Дата добавления - 02.03.2015 в 06:47
nilem Дата: Понедельник, 02.03.2015, 08:17 | Сообщение № 10
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
а если так:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 13 Then Exit Sub    'если выделено больше 1 ячейки - выходим
If Target.Cells.Count = 1 Then
     If Coord_Selection = False Then Exit Sub    'если выделение выключено - выходим

     Application.EnableEvents = False
     'Range("A1:AU10000")    'адрес рабочего диапазона, в пределах которого видно выделение
     Intersect(Range("A1:AU10000"), Union(Target.EntireColumn, Target.EntireRow)).Select    'формируем крестообразный диапазон и выделяем
     Target.Activate
     Application.EnableEvents = True
End If

rw = Target.Row
If rw <> Cells(Rows.Count, 1).End(xlUp).Row Then Exit Sub
If Selection.Address = "$A$" & rw & ":$M$" & rw Then
     Selection.Copy Sheets("Для Бухг").Cells(Rows.Count, 1).End(xlUp)(2, 1)
     Beep
End If
End Sub
[/vba]


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеа если так:
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Cells.Count > 13 Then Exit Sub    'если выделено больше 1 ячейки - выходим
If Target.Cells.Count = 1 Then
     If Coord_Selection = False Then Exit Sub    'если выделение выключено - выходим

     Application.EnableEvents = False
     'Range("A1:AU10000")    'адрес рабочего диапазона, в пределах которого видно выделение
     Intersect(Range("A1:AU10000"), Union(Target.EntireColumn, Target.EntireRow)).Select    'формируем крестообразный диапазон и выделяем
     Target.Activate
     Application.EnableEvents = True
End If

rw = Target.Row
If rw <> Cells(Rows.Count, 1).End(xlUp).Row Then Exit Sub
If Selection.Address = "$A$" & rw & ":$M$" & rw Then
     Selection.Copy Sheets("Для Бухг").Cells(Rows.Count, 1).End(xlUp)(2, 1)
     Beep
End If
End Sub
[/vba]

Автор - nilem
Дата добавления - 02.03.2015 в 08:17
plohish Дата: Понедельник, 02.03.2015, 08:23 | Сообщение № 11
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Coord_Selection ошибка!


Спасибки
 
Ответить
СообщениеCoord_Selection ошибка!

Автор - plohish
Дата добавления - 02.03.2015 в 08:23
plohish Дата: Понедельник, 02.03.2015, 08:29 | Сообщение № 12
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Скриншот
К сообщению приложен файл: 3560595.jpg (35.5 Kb)


Спасибки
 
Ответить
СообщениеСкриншот

Автор - plohish
Дата добавления - 02.03.2015 в 08:29
nilem Дата: Понедельник, 02.03.2015, 08:48 | Сообщение № 13
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
ну эти строки тоже ведь надо добавить:
[vba]
Код
Dim Coord_Selection As Boolean 'глобальная переменная для вкл/выкл выделения
Sub Selection_On() 'макрос включения выделения
Coord_Selection = True
End Sub
Sub Selection_Off() 'макрос выключения выделения
Coord_Selection = False
End Sub
[/vba]
и лист "Для Бухг" должен быть в наличии


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениену эти строки тоже ведь надо добавить:
[vba]
Код
Dim Coord_Selection As Boolean 'глобальная переменная для вкл/выкл выделения
Sub Selection_On() 'макрос включения выделения
Coord_Selection = True
End Sub
Sub Selection_Off() 'макрос выключения выделения
Coord_Selection = False
End Sub
[/vba]
и лист "Для Бухг" должен быть в наличии

Автор - nilem
Дата добавления - 02.03.2015 в 08:48
plohish Дата: Понедельник, 02.03.2015, 09:02 | Сообщение № 14
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Да лист есть в наличии и макрос один крестообразное выделение сам по себе работает, но вместе с копиром строк не хочет!


Спасибки
 
Ответить
СообщениеДа лист есть в наличии и макрос один крестообразное выделение сам по себе работает, но вместе с копиром строк не хочет!

Автор - plohish
Дата добавления - 02.03.2015 в 09:02
Pelena Дата: Понедельник, 02.03.2015, 09:30 | Сообщение № 15
Группа: Админы
Ранг: Местный житель
Сообщений: 19188
Репутация: 4421 ±
Замечаний: ±

Excel 365 & Mac Excel
Так нужно? (попаразитировала на файле от Manyasha)
К сообщению приложен файл: 8997043.xlsm (17.7 Kb)


"Черт возьми, Холмс! Но как??!!"
Ю-money 41001765434816
 
Ответить
СообщениеТак нужно? (попаразитировала на файле от Manyasha)

Автор - Pelena
Дата добавления - 02.03.2015 в 09:30
nilem Дата: Понедельник, 02.03.2015, 09:38 | Сообщение № 16
Группа: Авторы
Ранг: Старожил
Сообщений: 1613
Репутация: 563 ±
Замечаний: 0% ±

Excel 2013, 2016
и еще файлик
К сообщению приложен файл: 21.xlsm (18.8 Kb)


Яндекс.Деньги 4100159601573
 
Ответить
Сообщениеи еще файлик

Автор - nilem
Дата добавления - 02.03.2015 в 09:38
plohish Дата: Понедельник, 02.03.2015, 10:39 | Сообщение № 17
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Все равно не хочет зараза работать попробовал два последних примера ошибка та же!!! %)
К сообщению приложен файл: 3884076.jpg (40.3 Kb)


Спасибки
 
Ответить
СообщениеВсе равно не хочет зараза работать попробовал два последних примера ошибка та же!!! %)

Автор - plohish
Дата добавления - 02.03.2015 в 10:39
Manyasha Дата: Понедельник, 02.03.2015, 11:16 | Сообщение № 18
Группа: Модераторы
Ранг: Старожил
Сообщений: 2198
Репутация: 898 ±
Замечаний: 0% ±

Excel 2010, 2016
plohish, Вы случайно не добавляете строчку Option Explicit.
Добавьте в начало макроса объявление для rw
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rw As Integer
[/vba]
У меня работают все предложенные в этой теме варианты. Кстати, обратите внимание, в моем макросе и в макросе Pelena, копируется любая строчка A:M, а в макросе nilem, только последняя. Как Вам нужно - не знаю, просто на всякий случай указываю на это.


ЯД: 410013299366744 WM: R193491431804
 
Ответить
Сообщениеplohish, Вы случайно не добавляете строчку Option Explicit.
Добавьте в начало макроса объявление для rw
[vba]
Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim rw As Integer
[/vba]
У меня работают все предложенные в этой теме варианты. Кстати, обратите внимание, в моем макросе и в макросе Pelena, копируется любая строчка A:M, а в макросе nilem, только последняя. Как Вам нужно - не знаю, просто на всякий случай указываю на это.

Автор - Manyasha
Дата добавления - 02.03.2015 в 11:16
plohish Дата: Понедельник, 02.03.2015, 11:20 | Сообщение № 19
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
ОГО ВСЕ ЗАРАБОТАЛО НОРМ!!!! hands hands hands hands yahoo


Спасибки
 
Ответить
СообщениеОГО ВСЕ ЗАРАБОТАЛО НОРМ!!!! hands hands hands hands yahoo

Автор - plohish
Дата добавления - 02.03.2015 в 11:20
plohish Дата: Понедельник, 02.03.2015, 11:32 | Сообщение № 20
Группа: Проверенные
Ранг: Форумчанин
Сообщений: 127
Репутация: 1 ±
Замечаний: 60% ±

Excel 2010
Спасибо за ваше терпение!!!


Спасибки
 
Ответить
СообщениеСпасибо за ваше терпение!!!

Автор - plohish
Дата добавления - 02.03.2015 в 11:32
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Конфликт двух макросов (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

Яндекс.Метрика Яндекс цитирования
© 2010-2024 · Дизайн: MichaelCH · Хостинг от uCoz · При использовании материалов сайта, ссылка на www.excelworld.ru обязательна!