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

Вход

Регистрация

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

 

= Мир MS Excel/Worksheet_Change выдает ошибку breakpoint not allowed on thi - Мир MS Excel

Регистрация · Логин: · Пароль: · · Забыли пароль?
  • Страница 1 из 1
  • 1
Модератор форума: _Boroda_, Manyasha, SLAVICK, китин  
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Worksheet_Change выдает ошибку breakpoint not allowed on thi (Макросы/Sub)
Worksheet_Change выдает ошибку breakpoint not allowed on thi
lebensvoll Дата: Воскресенье, 24.03.2019, 02:49 | Сообщение № 1
Группа: Проверенные
Ранг: Ветеран
Сообщений: 889
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
Доброй ночи!!!
Прошу помощи не могу понять в чем проблема код ругается на строку
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]
Хотя данный код где только уже не использовался и все олрайд а тут :'(
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'код пользовательского формата ячейки
    If Target.Address(0, 0) = "D5" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
'код добавления нового сотрудника в выпадающий список
    Dim lReply As Long

    If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$O$43" Then
            If IsEmpty(Target) Then Exit Sub
                If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
                    lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                        If lReply = vbYes Then
                           Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
                        End If
                End If
        End If
    Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
End Sub
[/vba]
Помогите, подскажите, поправьте!!!
Спасибо вам огромнейшее
К сообщению приложен файл: 4719876.xlsm(88.5 Kb)


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеДоброй ночи!!!
Прошу помощи не могу понять в чем проблема код ругается на строку
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]
Хотя данный код где только уже не использовался и все олрайд а тут :'(
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'код пользовательского формата ячейки
    If Target.Address(0, 0) = "D5" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
'код добавления нового сотрудника в выпадающий список
    Dim lReply As Long

    If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$O$43" Then
            If IsEmpty(Target) Then Exit Sub
                If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
                    lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                        If lReply = vbYes Then
                           Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
                        End If
                End If
        End If
    Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
End Sub
[/vba]
Помогите, подскажите, поправьте!!!
Спасибо вам огромнейшее

Автор - lebensvoll
Дата добавления - 24.03.2019 в 02:49
_Boroda_ Дата: Воскресенье, 24.03.2019, 03:19 | Сообщение № 2
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15417
Репутация: 6032 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
У меня не ругается, нормально добавляет нового сотрудника в список
Что вводите? Отвечаете "Да"? Как ругается?


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеУ меня не ругается, нормально добавляет нового сотрудника в список
Что вводите? Отвечаете "Да"? Как ругается?

Автор - _Boroda_
Дата добавления - 24.03.2019 в 03:19
lebensvoll Дата: Воскресенье, 24.03.2019, 03:25 | Сообщение № 3
Группа: Проверенные
Ранг: Ветеран
Сообщений: 889
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, Александр спасибо за ответ и ночи доброй
В начале он просто не позволял и сразу выводил код в окрашивание красного с припиской breakpoint not allowed on thi
Сейчас действительно пишу свою фамилию и он позволяет, но как только выбираю ДА так вот так вот сразу выдает
[img][/img]
Бред какой то
Пересохранился и работает без ругания
И звените за беспокойство может с офисом что не так или компом


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Воскресенье, 24.03.2019, 03:29
 
Ответить
Сообщение_Boroda_, Александр спасибо за ответ и ночи доброй
В начале он просто не позволял и сразу выводил код в окрашивание красного с припиской breakpoint not allowed on thi
Сейчас действительно пишу свою фамилию и он позволяет, но как только выбираю ДА так вот так вот сразу выдает
[img][/img]
Бред какой то
Пересохранился и работает без ругания
И звените за беспокойство может с офисом что не так или компом

Автор - lebensvoll
Дата добавления - 24.03.2019 в 03:25
InExSu Дата: Воскресенье, 24.03.2019, 10:18 | Сообщение № 4
Группа: Проверенные
Ранг: Ветеран
Сообщений: 542
Репутация: 63 ±
Замечаний: 0% ±

Excel 2010
Привет!
И звените за беспокойство

Нет уж позвольте :-)

Ваш случай - удачный для создания артефакта.
Спагетти код налицо.
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]

Давайте его отрефакторим:
[vba]
Код
Столбец_Вниз_Ячейка_Свободная( _
  Worksheets("Сотрудники").Range("Сотр")).Value = Target
[/vba]

добавив:
[vba]
Код
Public Function Столбец_Вниз_Ячейка_Свободная(ByVal cell As Range) _
        As Range
    ' тестом Покрыто опосредованно
    ' вернуть ячейку свободную по столбцу вниз
    ' АртеФакт

    Set Столбец_Вниз_Ячейка_Свободная = cell.EntireColumn.End(xlDown).Offset(1, 0)

End Function
[/vba]


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839
 
Ответить
СообщениеПривет!
И звените за беспокойство

Нет уж позвольте :-)

Ваш случай - удачный для создания артефакта.
Спагетти код налицо.
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]

Давайте его отрефакторим:
[vba]
Код
Столбец_Вниз_Ячейка_Свободная( _
  Worksheets("Сотрудники").Range("Сотр")).Value = Target
[/vba]

добавив:
[vba]
Код
Public Function Столбец_Вниз_Ячейка_Свободная(ByVal cell As Range) _
        As Range
    ' тестом Покрыто опосредованно
    ' вернуть ячейку свободную по столбцу вниз
    ' АртеФакт

    Set Столбец_Вниз_Ячейка_Свободная = cell.EntireColumn.End(xlDown).Offset(1, 0)

End Function
[/vba]

Автор - InExSu
Дата добавления - 24.03.2019 в 10:18
_Boroda_ Дата: Воскресенье, 24.03.2019, 14:56 | Сообщение № 5
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15417
Репутация: 6032 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Какой в этом смысл?
То, что Worksheets("Сотрудники").Range("Сотр") нужно вынести в With - это да, но зачем в отдельную функцию, у нас же нет одинаковых блоков в нескольких частях кода?
Единственное, что мне приходит в голову - создание базы таких микрофункций для последующего использования. Согласен, это удобно и экономит время написания кода (написания, но не исполнения, исполнение будет чуть дольше - тратится время на вызов функции). Все это так для мастера VBA (коим Вы, несомненно, и являетесь) или для того, кто штампует коды пачками на продажу, а вот для не очень уверенного пользователя такой подход, (сразу оговорюсь - это мое личное мнение) вреда принесет гораздо больше, чем пользы. Основываясь на своем немалом опыте частного преподавания, утверждаю, что код нужно писать руками каждый раз заново до тех пор, пока не почвится 100%-е понимание написанного и пока он (код) не будет писаться полностью на автомате. Иначе обязательно возникнет ситуация, когда код написать нужно, а базы с функциями рядом не будет (да хотя бы тест при устройстве на работу). Что тогда этот не очень уверенный пользователь делать будет? Он ведь только пользовался своими функциями, а что там написано и как они работают - давно уже забыл и быстро восстановить необходимое ему будет очень сложно.
Повторюсь - это исключительно мое мнение, а выбирать, конечно, пользователю


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеКакой в этом смысл?
То, что Worksheets("Сотрудники").Range("Сотр") нужно вынести в With - это да, но зачем в отдельную функцию, у нас же нет одинаковых блоков в нескольких частях кода?
Единственное, что мне приходит в голову - создание базы таких микрофункций для последующего использования. Согласен, это удобно и экономит время написания кода (написания, но не исполнения, исполнение будет чуть дольше - тратится время на вызов функции). Все это так для мастера VBA (коим Вы, несомненно, и являетесь) или для того, кто штампует коды пачками на продажу, а вот для не очень уверенного пользователя такой подход, (сразу оговорюсь - это мое личное мнение) вреда принесет гораздо больше, чем пользы. Основываясь на своем немалом опыте частного преподавания, утверждаю, что код нужно писать руками каждый раз заново до тех пор, пока не почвится 100%-е понимание написанного и пока он (код) не будет писаться полностью на автомате. Иначе обязательно возникнет ситуация, когда код написать нужно, а базы с функциями рядом не будет (да хотя бы тест при устройстве на работу). Что тогда этот не очень уверенный пользователь делать будет? Он ведь только пользовался своими функциями, а что там написано и как они работают - давно уже забыл и быстро восстановить необходимое ему будет очень сложно.
Повторюсь - это исключительно мое мнение, а выбирать, конечно, пользователю

Автор - _Boroda_
Дата добавления - 24.03.2019 в 14:56
InExSu Дата: Воскресенье, 24.03.2019, 17:11 | Сообщение № 6
Группа: Проверенные
Ранг: Ветеран
Сообщений: 542
Репутация: 63 ±
Замечаний: 0% ±

Excel 2010
базы таких микрофункций для последующего использования.

Именно.
Если наша цель - удовольствие при программировании, то наш поводырь в этом процессе когнитивная сложность - стало сЛожно - скоро исчезнет благодать.
Возможности сознательного написания и анализа кода ограничены.
Кто боролся со сложностью проектов, создавая код, понятный компилятору, замечая, что не понимает собственный код через неделю?

Выход нашли до нас: иерархия, декораторы и артефакты.

Артефакт для программиста - функция нулевой сложности. Её некуда упрощать. Программист за артефакты спокоен, они:
- понятны
- подвержены юнит-тестированию = не подведут
- повышают производительность труда, ибо
- часто используются повторно
- элементы живого ООП - разрушьте собор, создайте базар.
- тут я много наконспектировал :-)

Вот пример одной из моих иерархии:
[vba]
Код
    Excel_Speed_off _
            Лист_Временый_Удалить( _
            Лист_Временный_Диап_на_Лист_Новый( _
            Строки_Ниже_Слова_Удалить("ВСЕГО ПО СМЕТЕ:", _
            Лист_Временный_Формулы( _
            Названия_на_Лист_Временный( _
            Диап_Строки_Ячейки_Пустые_Удалить( _
            Лист_Диап_Подготовить( _
            Фигуры_Удалить( _
            Лист_Временный_Столбцы_Удалить( _
            Лист_Временный_Строки_Удалить( _
            Лист_Смета_Диап_на_Лист_Временный( _
            Лист_Имя_Рабочка( _
            Лист_Шаблон_Копировать( _
            Лист_Удалить( _
            ЭтаКнига.Копия_Дата_Время(ThisWorkbook, _
            Settings( _
            Листы_нужные_Проверить( _
            Excel_Speed_ON)))))))))))))))))
[/vba]
Она состоит из артефактов и декораторов артефактов. Почти весь код под контролем. Это почти проза. Я продолжаю с удовольствием программировать - чего и Вам желаю!


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839

Сообщение отредактировал InExSu - Воскресенье, 24.03.2019, 17:15
 
Ответить
Сообщение
базы таких микрофункций для последующего использования.

Именно.
Если наша цель - удовольствие при программировании, то наш поводырь в этом процессе когнитивная сложность - стало сЛожно - скоро исчезнет благодать.
Возможности сознательного написания и анализа кода ограничены.
Кто боролся со сложностью проектов, создавая код, понятный компилятору, замечая, что не понимает собственный код через неделю?

Выход нашли до нас: иерархия, декораторы и артефакты.

Артефакт для программиста - функция нулевой сложности. Её некуда упрощать. Программист за артефакты спокоен, они:
- понятны
- подвержены юнит-тестированию = не подведут
- повышают производительность труда, ибо
- часто используются повторно
- элементы живого ООП - разрушьте собор, создайте базар.
- тут я много наконспектировал :-)

Вот пример одной из моих иерархии:
[vba]
Код
    Excel_Speed_off _
            Лист_Временый_Удалить( _
            Лист_Временный_Диап_на_Лист_Новый( _
            Строки_Ниже_Слова_Удалить("ВСЕГО ПО СМЕТЕ:", _
            Лист_Временный_Формулы( _
            Названия_на_Лист_Временный( _
            Диап_Строки_Ячейки_Пустые_Удалить( _
            Лист_Диап_Подготовить( _
            Фигуры_Удалить( _
            Лист_Временный_Столбцы_Удалить( _
            Лист_Временный_Строки_Удалить( _
            Лист_Смета_Диап_на_Лист_Временный( _
            Лист_Имя_Рабочка( _
            Лист_Шаблон_Копировать( _
            Лист_Удалить( _
            ЭтаКнига.Копия_Дата_Время(ThisWorkbook, _
            Settings( _
            Листы_нужные_Проверить( _
            Excel_Speed_ON)))))))))))))))))
[/vba]
Она состоит из артефактов и декораторов артефактов. Почти весь код под контролем. Это почти проза. Я продолжаю с удовольствием программировать - чего и Вам желаю!

Автор - InExSu
Дата добавления - 24.03.2019 в 17:11
InExSu Дата: Воскресенье, 24.03.2019, 17:38 | Сообщение № 7
Группа: Проверенные
Ранг: Ветеран
Сообщений: 542
Репутация: 63 ±
Замечаний: 0% ±

Excel 2010
зачем в отдельную функцию

Чтобы использовать потом и не раз. Не последний же раз программируем?
И большинству обычных программистов проще понять
[vba]
Код
Столбец_Вниз_Ячейка_Свободная( _
Worksheets("Сотрудники").Range("Сотр"))
[/vba]
чем
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1)
[/vba]
?
И когда код состоит из простых функций - юнитов, его можно тестировать - юнит-тестировать. А код спагетти несколько затруднительно тестировать.
Цель - простота и удовольствие от труда.


На сохранение второго закона термодинамики: яндекс.кошелёк 410012113235839
 
Ответить
Сообщение
зачем в отдельную функцию

Чтобы использовать потом и не раз. Не последний же раз программируем?
И большинству обычных программистов проще понять
[vba]
Код
Столбец_Вниз_Ячейка_Свободная( _
Worksheets("Сотрудники").Range("Сотр"))
[/vba]
чем
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1)
[/vba]
?
И когда код состоит из простых функций - юнитов, его можно тестировать - юнит-тестировать. А код спагетти несколько затруднительно тестировать.
Цель - простота и удовольствие от труда.

Автор - InExSu
Дата добавления - 24.03.2019 в 17:38
lebensvoll Дата: Воскресенье, 24.03.2019, 20:32 | Сообщение № 8
Группа: Проверенные
Ранг: Ветеран
Сообщений: 889
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
InExSu, _Boroda_, ГОСПОДА!!!
Вечер бодрый, если честно я лишь понял одно
Цитата
Нет уж позвольте :-)

Ваш случай - удачный для создания артефакта.
Спагетти код налицо.

И это факт!!!
В связи с тем что я дополнил ранее код предоставленный Александром My WebPage с этой темы.
Теперь получается что добавленный код по "Добавлению в выпадающий список нового сотрудника" срабатывает.
А вот если присвоить номер протокола то он не дополняет его текстом "Протокол №"
InExSu, Данный код на "Добавление нового в выпадающий список" работает на ура во всех созданных мною файлах. Эту тему поднимали и помогали в решении на этом форуме а также тут My WebPage
За чем его усложнять в моем понимание, мне и так очень сложно дается понимание VBA...
Но спасибо за отзывчивость!!!
И как мне теперь быть!? Возможно как раз таки из за этого у меня и были в начале проблемы побудившие поднять данную тему с "руганием" кода


Кто бы ты ни был, мир в твоих руках

Сообщение отредактировал lebensvoll - Воскресенье, 24.03.2019, 20:41
 
Ответить
СообщениеInExSu, _Boroda_, ГОСПОДА!!!
Вечер бодрый, если честно я лишь понял одно
Цитата
Нет уж позвольте :-)

Ваш случай - удачный для создания артефакта.
Спагетти код налицо.

И это факт!!!
В связи с тем что я дополнил ранее код предоставленный Александром My WebPage с этой темы.
Теперь получается что добавленный код по "Добавлению в выпадающий список нового сотрудника" срабатывает.
А вот если присвоить номер протокола то он не дополняет его текстом "Протокол №"
InExSu, Данный код на "Добавление нового в выпадающий список" работает на ура во всех созданных мною файлах. Эту тему поднимали и помогали в решении на этом форуме а также тут My WebPage
За чем его усложнять в моем понимание, мне и так очень сложно дается понимание VBA...
Но спасибо за отзывчивость!!!
И как мне теперь быть!? Возможно как раз таки из за этого у меня и были в начале проблемы побудившие поднять данную тему с "руганием" кода

Автор - lebensvoll
Дата добавления - 24.03.2019 в 20:32
_Boroda_ Дата: Воскресенье, 24.03.2019, 21:12 | Сообщение № 9
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15417
Репутация: 6032 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Ничего не понял


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995
 
Ответить
СообщениеНичего не понял

Автор - _Boroda_
Дата добавления - 24.03.2019 в 21:12
lebensvoll Дата: Воскресенье, 24.03.2019, 21:25 | Сообщение № 10
Группа: Проверенные
Ранг: Ветеран
Сообщений: 889
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
_Boroda_, :'( моя проблема слишком много текста...
Созданная тема с выдачей ошибки она решилась.
Предложение от InExSu, чтоб не было спагетти на мой взгляд есть в этом что то...
Но оно связано лишь при с тем что в один код
Цитата
Worksheet_Change
объединил два действия.
1. Это действие на листе из прошлой темы по "Пользовательскому формату ячейки"
[vba]
Код


Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "D5" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
End Sub
[/vba]
Затем я решил дополнить данное событие на листе еще одним кодом "Добавление нового в выпадающий список"
2.[vba]
Код
'код добавления нового сотрудника в выпадающий список
    Dim lReply As Long

    If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$O$43" Then
            If IsEmpty(Target) Then Exit Sub
                If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
                    lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                        If lReply = vbYes Then
                        Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
                        End If
                End If
        End If
    Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
End Sub
[/vba]
И скорее всего из за этого в начале у меня возникали ОШИБКИ и код ругался на строку
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]
Но после перестал, не могу понять по чему но все же.
Но позже я заметил что 1-е событие теперь не срабатывает :o :'(


Кто бы ты ни был, мир в твоих руках
 
Ответить
Сообщение_Boroda_, :'( моя проблема слишком много текста...
Созданная тема с выдачей ошибки она решилась.
Предложение от InExSu, чтоб не было спагетти на мой взгляд есть в этом что то...
Но оно связано лишь при с тем что в один код
Цитата
Worksheet_Change
объединил два действия.
1. Это действие на листе из прошлой темы по "Пользовательскому формату ячейки"
[vba]
Код


Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address(0, 0) = "D5" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
End Sub
[/vba]
Затем я решил дополнить данное событие на листе еще одним кодом "Добавление нового в выпадающий список"
2.[vba]
Код
'код добавления нового сотрудника в выпадающий список
    Dim lReply As Long

    If Target.Cells.Count > 1 Then Exit Sub
        If Target.Address = "$O$43" Then
            If IsEmpty(Target) Then Exit Sub
                If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
                    lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
                        If lReply = vbYes Then
                        Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
                        End If
                End If
        End If
    Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
End Sub
[/vba]
И скорее всего из за этого в начале у меня возникали ОШИБКИ и код ругался на строку
[vba]
Код
Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
[/vba]
Но после перестал, не могу понять по чему но все же.
Но позже я заметил что 1-е событие теперь не срабатывает :o :'(

Автор - lebensvoll
Дата добавления - 24.03.2019 в 21:25
lebensvoll Дата: Воскресенье, 24.03.2019, 21:32 | Сообщение № 11
Группа: Проверенные
Ранг: Ветеран
Сообщений: 889
Репутация: 24 ±
Замечаний: 0% ±

Excel 2010
Все тема закрыта!!!
Разобрался и нашел ошибку....
Простите меня пжл спасибо огромнейшее за отзывчивость и помощь....


Кто бы ты ни был, мир в твоих руках
 
Ответить
СообщениеВсе тема закрыта!!!
Разобрался и нашел ошибку....
Простите меня пжл спасибо огромнейшее за отзывчивость и помощь....

Автор - lebensvoll
Дата добавления - 24.03.2019 в 21:32
_Boroda_ Дата: Воскресенье, 24.03.2019, 21:44 | Сообщение № 12
Группа: Модераторы
Ранг: Местный житель
Сообщений: 15417
Репутация: 6032 ±
Замечаний: 0% ±

2003; 2007; 2010; 2013 RUS
Конечно не срабатывает. В коде ячейка D5, а в файле В14

И еще, по-моему это довольно важно, особенно на начальном этапе - следите за иерархией кода. Сейчас у Вас там так написано, что для того, чтобы разобраться, нужно внимательно все просмотреть. А должно быть все понятно с первого взгляда. На работу кода это не влияет, а вот на понимание того, что как и после чего идет - влияет очень сильно
Кстати, сортировку нужно делать для Q43, поэтому ее нужно занести вовнутрь If
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'код пользовательского формата ячейки
    If Target.Address(0, 0) = "B14" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
'код добавления ного сотрудника в выпадающий список
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Address = "$O$43" Then
        If IsEmpty(Target) Then Exit Sub
        If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
            lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
            If lReply = vbYes Then
               Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
            End If
            Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
        End If
    End If
End Sub
[/vba]

* Ага, пока я писал, уже разобрался. Ну ладно, все равно оставлю
И тогда формулу для возраста бетона добавлю
Код
=ABS(ПРАВБ(B14;2))
К сообщению приложен файл: 4719876_1.xlsm(88.9 Kb)


Скажи мне, кудесник, любимец ба’гов...
Платная помощь:
Boroda_Excel@mail.ru
Яндекс-деньги: 41001632713405 | Webmoney: R289877159277; Z102172301748; E177867141995


Сообщение отредактировал _Boroda_ - Воскресенье, 24.03.2019, 21:47
 
Ответить
СообщениеКонечно не срабатывает. В коде ячейка D5, а в файле В14

И еще, по-моему это довольно важно, особенно на начальном этапе - следите за иерархией кода. Сейчас у Вас там так написано, что для того, чтобы разобраться, нужно внимательно все просмотреть. А должно быть все понятно с первого взгляда. На работу кода это не влияет, а вот на понимание того, что как и после чего идет - влияет очень сильно
Кстати, сортировку нужно делать для Q43, поэтому ее нужно занести вовнутрь If
[vba]
Код
Private Sub Worksheet_Change(ByVal Target As Range)
'код пользовательского формата ячейки
    If Target.Address(0, 0) = "B14" Then
        t_ = Split(Target, "-")
        If UBound(t_) Then
            Application.EnableEvents = 0
            Target = "Протокол № " & Format(t_(0), "000\-") & t_(1)
            Application.EnableEvents = 1
        End If
    End If
'код добавления ного сотрудника в выпадающий список
    If Target.Cells.Count > 1 Then Exit Sub
    If Target.Address = "$O$43" Then
        If IsEmpty(Target) Then Exit Sub
        If WorksheetFunction.CountIf(Worksheets("Сотрудники").Range("Сотр"), Target) = 0 Then
            lReply = MsgBox("Добавить введенное имя " & Target & " в выпадающий список?", vbYesNo + vbQuestion)
            If lReply = vbYes Then
               Worksheets("Сотрудники").Range("Сотр").Cells(Worksheets("Сотрудники").Range("Сотр").Rows.Count + 1, 1) = Target
            End If
            Sheets("Сотрудники").Range("A1:A1000").Sort Key1:=Sheets("Сотрудники").Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
                OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
                DataOption1:=xlSortNormal 'этот код и поможет отсортировать в алфавитном порядке
        End If
    End If
End Sub
[/vba]

* Ага, пока я писал, уже разобрался. Ну ладно, все равно оставлю
И тогда формулу для возраста бетона добавлю
Код
=ABS(ПРАВБ(B14;2))

Автор - _Boroda_
Дата добавления - 24.03.2019 в 21:44
Мир MS Excel » Вопросы и решения » Вопросы по VBA » Worksheet_Change выдает ошибку breakpoint not allowed on thi (Макросы/Sub)
  • Страница 1 из 1
  • 1
Поиск:

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