Как добапить прроверку с предупреждением на ошибочное нажатие кнопки Доброго дня! Например. Сейчас при нажатии кнопки «Сховати (на рус. – спрятать) листи», в случае если незакрытым остается последний лист этой кнпги, Ексель выдает сообщение об ошибке. А хотелось бы чтобы выпадало окно с предупреждением типа «Последний лист спрятать невозможно!». А также неплохо было бы, чтобы выпадало сообение с предупреждением в случае нажатия не той кнопки. Например, если лист «Списки» уже спрятан, а пользователь ошибочно нажимает кнопку «Сховати листи», ексель выдает : «Вы нажали не ту кнопку!». И таким же образом сделать и на кнопке «Показати (на рус. - показать) листы" С ув. Муля2010!
Как добапить прроверку с предупреждением на ошибочное нажатие кнопки Доброго дня! Например. Сейчас при нажатии кнопки «Сховати (на рус. – спрятать) листи», в случае если незакрытым остается последний лист этой кнпги, Ексель выдает сообщение об ошибке. А хотелось бы чтобы выпадало окно с предупреждением типа «Последний лист спрятать невозможно!». А также неплохо было бы, чтобы выпадало сообение с предупреждением в случае нажатия не той кнопки. Например, если лист «Списки» уже спрятан, а пользователь ошибочно нажимает кнопку «Сховати листи», ексель выдает : «Вы нажали не ту кнопку!». И таким же образом сделать и на кнопке «Показати (на рус. - показать) листы" С ув. Муля2010!Муля2010
Здравствуйте! Во-первых, Ваш код у меня сразу не заработал - имя кнопки требуется "Button 212", а для скрытия листов надо в коде Visible = 0 прописать. А далее, после исправления этих небольших недочётов - что-то я не понимаю... И кнопка у Вас одна для работы с листами (т.е. нельзя нажать не ту), и листы скрываются исправно, и если один скрыть вручную - никакой ошибки не выдаётся. И по какой причине лист может остаться незакрытым - я тоже не понимаю...
Здравствуйте! Во-первых, Ваш код у меня сразу не заработал - имя кнопки требуется "Button 212", а для скрытия листов надо в коде Visible = 0 прописать. А далее, после исправления этих небольших недочётов - что-то я не понимаю... И кнопка у Вас одна для работы с листами (т.е. нельзя нажать не ту), и листы скрываются исправно, и если один скрыть вручную - никакой ошибки не выдаётся. И по какой причине лист может остаться незакрытым - я тоже не понимаю...Hugo
Во-первых, Ваш код у меня сразу не заработал - имя кнопки требуется "Button 212", а для скрытия листов надо в коде Visible = 0 прописать.
Начну с того, что именно эти коды не мои, а Дмитрия. И больших притензий к их работе у меня нету. И даже с этими недостатками, моя прога может успешно работать. Просто в пикантных ситуациях, у пользователя ( то биш у меня)возникают некоторые неудобства. А относительно названия кнопки на английском языке. Это как раз проявляется та причина, на которую вы мне указывали на Планете. В моем русификованом Офис 2003 работает название, именно "Кнопка 212". К стати. Почему "Кнопка 212"? Из обяснений на Планете я так и не понял где (в Екселе или ВБА) можно отыскать это наименование.Чтобы убедиться, что это именно 212, а не 1 или 2.
Quote (Муля2010)
что-то я не понимаю... И кнопка у Вас одна для работы с листами (т.е. нельзя нажать не ту), и листы скрываются исправно, и если один скрыть вручную - никакой ошибки не выдаётся. И по какой причине лист может остаться незакрытым - я тоже не понимаю...
Игорь! Я виноват, в том, что не точно сформулировал задчу. Вы смотрите на кнопку "Показати листи/Сховати листи". Эта кнопка и макрос, к ней привязаный, на даном этапе , уже не нужны (в спешке забыл их удалить). Нажмите, пожалуйста, на кнопку "Листы". Выпадет окно "Перелік листів". Именно в зтом окне, имеются две кнопки: "Сховати листи" и "Показаті листи". Вот о них и идет речь. Стало быть, в ситуации, когда незакрытым остается один-единственный лист и пользователь нажимает кнопку "Сховати листи" (не имеет значения, случайно или целенаправлено), выпадает окно Бейсика с оповещением об ошибке. А мне бы хотелось, чтобы выпадало окно с предупреждением типа"Последний лист скрыть нельзя!". И эксель не позволял бы пользователю это сделать. Что касается мрего ывторого вопроса, то на мой взгляд, его можно решить двояко. Либо сделать одну кнопку на скрыть/показать листы (примерно так, как это сделано на листе Екселя, на кнопке которая подлежит удалению). Это идеальный вариант. Либо, добавить в коды обеих кнопок проверку на случайное (ошибочное)нажатие не той кнопки. Типа : "Вы нажали не ту кнопку!". А на даном этапе, при таком нажатии, ничего не происходит. И у пользователя автоматически возникает мысль о том, что Прога работает некоректно. Вот и все. С ув. Муля!
Всем доброго дня и отличного здоровя!
Quote (Hugo)
Во-первых, Ваш код у меня сразу не заработал - имя кнопки требуется "Button 212", а для скрытия листов надо в коде Visible = 0 прописать.
Начну с того, что именно эти коды не мои, а Дмитрия. И больших притензий к их работе у меня нету. И даже с этими недостатками, моя прога может успешно работать. Просто в пикантных ситуациях, у пользователя ( то биш у меня)возникают некоторые неудобства. А относительно названия кнопки на английском языке. Это как раз проявляется та причина, на которую вы мне указывали на Планете. В моем русификованом Офис 2003 работает название, именно "Кнопка 212". К стати. Почему "Кнопка 212"? Из обяснений на Планете я так и не понял где (в Екселе или ВБА) можно отыскать это наименование.Чтобы убедиться, что это именно 212, а не 1 или 2.
Quote (Муля2010)
что-то я не понимаю... И кнопка у Вас одна для работы с листами (т.е. нельзя нажать не ту), и листы скрываются исправно, и если один скрыть вручную - никакой ошибки не выдаётся. И по какой причине лист может остаться незакрытым - я тоже не понимаю...
Игорь! Я виноват, в том, что не точно сформулировал задчу. Вы смотрите на кнопку "Показати листи/Сховати листи". Эта кнопка и макрос, к ней привязаный, на даном этапе , уже не нужны (в спешке забыл их удалить). Нажмите, пожалуйста, на кнопку "Листы". Выпадет окно "Перелік листів". Именно в зтом окне, имеются две кнопки: "Сховати листи" и "Показаті листи". Вот о них и идет речь. Стало быть, в ситуации, когда незакрытым остается один-единственный лист и пользователь нажимает кнопку "Сховати листи" (не имеет значения, случайно или целенаправлено), выпадает окно Бейсика с оповещением об ошибке. А мне бы хотелось, чтобы выпадало окно с предупреждением типа"Последний лист скрыть нельзя!". И эксель не позволял бы пользователю это сделать. Что касается мрего ывторого вопроса, то на мой взгляд, его можно решить двояко. Либо сделать одну кнопку на скрыть/показать листы (примерно так, как это сделано на листе Екселя, на кнопке которая подлежит удалению). Это идеальный вариант. Либо, добавить в коды обеих кнопок проверку на случайное (ошибочное)нажатие не той кнопки. Типа : "Вы нажали не ту кнопку!". А на даном этапе, при таком нажатии, ничего не происходит. И у пользователя автоматически возникает мысль о том, что Прога работает некоректно. Вот и все. С ув. Муля!Муля2010
С ув. Муля!
Сообщение отредактировал Муля2010 - Пятница, 17.09.2010, 10:43
Доброе утро. Название кнопки видно в окне, где адреса ячеек показываются, если нажать на кнопке ПКМ. И поменять его кстати там же можно. В остальное пока вникать некогда, извините. Попозже.
Доброе утро. Название кнопки видно в окне, где адреса ячеек показываются, если нажать на кнопке ПКМ. И поменять его кстати там же можно. В остальное пока вникать некогда, извините. Попозже.Hugo
Ну вот, по поводу скрытия последнего видимого листа:
Code
Private Sub CommandButton3_Click() Dim sh As Object Dim cnt As Integer For Each sh In ThisWorkbook.Sheets If sh.Visible = True Then cnt = cnt + 1 Next If cnt = 1 Then MsgBox "Последний лист скрыть нельзя!": Exit Sub Sheets(ListBox1.List(ListBox1.ListIndex)).Visible = 2 End Sub
Что касается второго вопроса: вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
P.S. Или даже так - если выделен скрытый лист - то его можно только удалить или показать. Если выделен видимый - можно удалить, скрыть или перейти. Лишние кнопки можно или вообще прятать (но так будет в глазах рябить) или делать неактивными. В общем, на выходных посмотрю.
Ну вот, по поводу скрытия последнего видимого листа:
Code
Private Sub CommandButton3_Click() Dim sh As Object Dim cnt As Integer For Each sh In ThisWorkbook.Sheets If sh.Visible = True Then cnt = cnt + 1 Next If cnt = 1 Then MsgBox "Последний лист скрыть нельзя!": Exit Sub Sheets(ListBox1.List(ListBox1.ListIndex)).Visible = 2 End Sub
Что касается второго вопроса: вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
P.S. Или даже так - если выделен скрытый лист - то его можно только удалить или показать. Если выделен видимый - можно удалить, скрыть или перейти. Лишние кнопки можно или вообще прятать (но так будет в глазах рябить) или делать неактивными. В общем, на выходных посмотрю.
Вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
Игорь, Ради Бога! Я вас не тороплю. И предыдущие мои высказывания, прошу трактовать не как притензию к вашей , ну очень полезной работе, а как дружеские пожелания, с целью достижения взаимного успеха в даном деле. А теперь по сути вопроса. Только учтите пожалуйста! Таких листов, как 04.2010 будет много. По 12 каждый год
Quote (Hugo)
Вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
Игорь, Ради Бога! Я вас не тороплю. И предыдущие мои высказывания, прошу трактовать не как притензию к вашей , ну очень полезной работе, а как дружеские пожелания, с целью достижения взаимного успеха в даном деле. А теперь по сути вопроса. Только учтите пожалуйста! Таких листов, как 04.2010 будет много. По 12 каждый годМуля2010
И на каждом листе кнопки вызова одной формы? Тогда надо удалить те листы, где нет кнопки вызова формы. А то будет, как у меня только что было - остался видимым только лист 3, где нет вызова формы, а все другие листы открыть только через редактор ВБА можно
И на каждом листе кнопки вызова одной формы? Тогда надо удалить те листы, где нет кнопки вызова формы. А то будет, как у меня только что было - остался видимым только лист 3, где нет вызова формы, а все другие листы открыть только через редактор ВБА можно Hugo
Вот такой код добавьте в форму (там нет этого события):
Code
Private Sub ListBox1_Click() If Worksheets(ListBox1.List(ListBox1.ListIndex)).Visible = True Then CommandButton3.Enabled = True CommandButton4.Enabled = False Else CommandButton3.Enabled = False CommandButton4.Enabled = True End If End Sub
Вот еще вопрос, что делать с кнопкой "Перейти" - можно переходить на скрытый лист (открыть и перейти) или нельзя? Да, и ещё кнопка удаления тоже только видимые листы удалять должна или скрытые тоже? Это всё вопросы к заказчику.
Вот такой код добавьте в форму (там нет этого события):
Code
Private Sub ListBox1_Click() If Worksheets(ListBox1.List(ListBox1.ListIndex)).Visible = True Then CommandButton3.Enabled = True CommandButton4.Enabled = False Else CommandButton3.Enabled = False CommandButton4.Enabled = True End If End Sub
Вот еще вопрос, что делать с кнопкой "Перейти" - можно переходить на скрытый лист (открыть и перейти) или нельзя? Да, и ещё кнопка удаления тоже только видимые листы удалять должна или скрытые тоже? Это всё вопросы к заказчику.
И на каждом листе кнопки вызова одной формы? Тогда надо удалить те листы, где нет кнопки вызова формы. А то будет, как у меня только что было - остался видимым только лист 3, где нет вызова формы, а все другие листы открыть только через редактор ВБА можно
Да на каждом, типа : 04.2010, 05.2010, 06.2010 и так далее, кроме листа "Списки" (на котором, к стати, можна застолбить такую же кнопку). В случае надобности, конечно.А вот Лист3 не будет совсем. Поскольку он введен как пример.
Quote (Hugo)
И на каждом листе кнопки вызова одной формы? Тогда надо удалить те листы, где нет кнопки вызова формы. А то будет, как у меня только что было - остался видимым только лист 3, где нет вызова формы, а все другие листы открыть только через редактор ВБА можно
Да на каждом, типа : 04.2010, 05.2010, 06.2010 и так далее, кроме листа "Списки" (на котором, к стати, можна застолбить такую же кнопку). В случае надобности, конечно.А вот Лист3 не будет совсем. Поскольку он введен как пример.Муля2010
Вот еще вопрос, что делать с кнопкой "Перейти" - можно переходить на скрытый лист (открыть и перейти) или нельзя?
Конечно же можно. Я и сам планировал это сделать. Но как то закрутьился и забыл. А потом для меня, без наглядного примера, сделать это сложновато.
Quote (Hugo)
Вот еще вопрос, что делать с кнопкой "Перейти" - можно переходить на скрытый лист (открыть и перейти) или нельзя?
Конечно же можно. Я и сам планировал это сделать. Но как то закрутьился и забыл. А потом для меня, без наглядного примера, сделать это сложновато.Муля2010
С ув. Муля!
Сообщение отредактировал Муля2010 - Пятница, 17.09.2010, 18:02
Что касается второго вопроса: вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
И вот еще, в процесе тестирования возникла следующая ситуация. Например, остались незакрытыми два листа "Списки" и "04.2010" (но вместо последнего, может быть и другой лист из этой серии 05.2010, 06.2010 ...). Пользователь ошибочно скрывает, именно такой лист. Стало быть, теперь открыть другие листы, можно только через ВБА (у вас кажется тоже такое случилось). Можна ли избежать такой ситуации, без ввода кнопки "Листи", именно на листе "Списки"?
Quote (Hugo)
Что касается второго вопроса: вообще там надо бы при выделении уже скрытых делать кнопку скрытия неактивной, и наоборот. А лист 04.2010 вообще в этот список не включать. Но это уже точно не на 5 минут работа.
И вот еще, в процесе тестирования возникла следующая ситуация. Например, остались незакрытыми два листа "Списки" и "04.2010" (но вместо последнего, может быть и другой лист из этой серии 05.2010, 06.2010 ...). Пользователь ошибочно скрывает, именно такой лист. Стало быть, теперь открыть другие листы, можно только через ВБА (у вас кажется тоже такое случилось). Можна ли избежать такой ситуации, без ввода кнопки "Листи", именно на листе "Списки"?Муля2010
С ув. Муля!
Сообщение отредактировал Муля2010 - Пятница, 17.09.2010, 19:11
Вот я добрался до компа. Сразу по последнему вопросу - если такой лист без кнопки один, значит его можно не считать, когда высчитываем количество открытых листов. Если он будет скрыт - ну и ладно, а если он будет открыт - код не даст скрыть предпоследний лист, который с кнопкой:
Code
If sh.Name <> "Списки" Then If sh.Visible = True Then cnt = cnt + 1 End If
Сейчас кнопки продолжу настраивать...
Вот я добрался до компа. Сразу по последнему вопросу - если такой лист без кнопки один, значит его можно не считать, когда высчитываем количество открытых листов. Если он будет скрыт - ну и ладно, а если он будет открыт - код не даст скрыть предпоследний лист, который с кнопкой:
Code
If sh.Name <> "Списки" Then If sh.Visible = True Then cnt = cnt + 1 End If
Ну вот так вроде неплохо смотрится. Оставить один лист "Списки" не получится. Правда и скрыть его предпоследним тоже... Вообще это ограничение в этой версии лишнее - ведь у Вас сейчас можно вызвать эту форму с любого листа и без кнопки - через контекстное меню листа. Забыли?
Ну вот так вроде неплохо смотрится. Оставить один лист "Списки" не получится. Правда и скрыть его предпоследним тоже... Вообще это ограничение в этой версии лишнее - ведь у Вас сейчас можно вызвать эту форму с любого листа и без кнопки - через контекстное меню листа. Забыли?Hugo
Правда и скрыть его предпоследним тоже... Вообще это ограничение в этой версии лишнее - ведь у Вас сейчас можно вызвать эту форму с любого листа и без кнопки - через контекстное меню листа. Забыли?
Игорь! Вот Это меню пока найти не могу
Quote (Hugo)
Правда и скрыть его предпоследним тоже... Вообще это ограничение в этой версии лишнее - ведь у Вас сейчас можно вызвать эту форму с любого листа и без кнопки - через контекстное меню листа. Забыли?
Хорошего выходного дня, великлепного самочуствия и веселых, ободряющих Душу и Тело, жизненных событий и смешных приключений вам, безценный мой помощник! Что касается
Quote (Hugo)
Да на любой ячейке нажмите ПКМ - третий пункт "Листи". Явно Ваше меню
то утром я и сам утром увидел. Вчера от перегрузок (пытался сам сделать макросы, но гдето-что то сделаю не так и все клинит) какое то умственное затмение наступает. А может просто не хватает знаний и пракического опыта. Далее. Все получается, очень и очень хорошо!
Quote (Hugo)
Оставить один лист "Списки" не получится.
Не получается - и не надо с этим больше возиться. Возращаемся к предыдущему макросу и все. И последняя просьба. Попробуйте устранить последнее неудобство. Выглядит оно следующимобразом. Если нажимаем любую из кнопок этого окна,без выделения листа в списке, выпадает окно ВБА из сообщением об ошибке. Но было бы супер, если б выпадало сообщение типа : "Вы забыли выделить лист!". С ув. Муля!
Хорошего выходного дня, великлепного самочуствия и веселых, ободряющих Душу и Тело, жизненных событий и смешных приключений вам, безценный мой помощник! Что касается
Quote (Hugo)
Да на любой ячейке нажмите ПКМ - третий пункт "Листи". Явно Ваше меню
то утром я и сам утром увидел. Вчера от перегрузок (пытался сам сделать макросы, но гдето-что то сделаю не так и все клинит) какое то умственное затмение наступает. А может просто не хватает знаний и пракического опыта. Далее. Все получается, очень и очень хорошо!
Quote (Hugo)
Оставить один лист "Списки" не получится.
Не получается - и не надо с этим больше возиться. Возращаемся к предыдущему макросу и все. И последняя просьба. Попробуйте устранить последнее неудобство. Выглядит оно следующимобразом. Если нажимаем любую из кнопок этого окна,без выделения листа в списке, выпадает окно ВБА из сообщением об ошибке. Но было бы супер, если б выпадало сообщение типа : "Вы забыли выделить лист!". С ув. Муля!Муля2010
Есть другой путь - выделить первый лист списка при загрузке формы:
Code
Private Sub UserForm_Activate() ListBox1.Clear For n = 1 To ThisWorkbook.Worksheets.Count ListBox1.AddItem ThisWorkbook.Worksheets(n).Name Next ListBox1.ListIndex = 0 End Sub
Теперь ошибки при нажатии кнопки не будет. Выдать сообщение тоже можно было бы - обработкой ошибки. Но тогда это надо писать на каждую из кнопок. Но мне кажется, лучше сделать так - сразу выбрать первый элемент списка.
Есть другой путь - выделить первый лист списка при загрузке формы:
Code
Private Sub UserForm_Activate() ListBox1.Clear For n = 1 To ThisWorkbook.Worksheets.Count ListBox1.AddItem ThisWorkbook.Worksheets(n).Name Next ListBox1.ListIndex = 0 End Sub
Теперь ошибки при нажатии кнопки не будет. Выдать сообщение тоже можно было бы - обработкой ошибки. Но тогда это надо писать на каждую из кнопок. Но мне кажется, лучше сделать так - сразу выбрать первый элемент списка.Hugo