|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Я пытаюсь создать подобие навигатора по листам с помощью UserForm, поскольку листов в книге очень много и ходить по ним неудобно. Всё работает замечательно: выбираю в списке на UserForm название листа и тот активируется. Но листы периодически теряют актуальность, в таком случае я нажимаю кнопку на листе, нужные данные переносятся в разные таблички, а сам лист удаляется. И почему-то в этот момент закрывается UserForm, хотя нигде в коде такого не прописано. Если я удаляю лист вручную - UserForm не закрывается. Я попробовала перенести UserForm в отдельную книгу, но в таком случае непонятно, как к нему обратиться из основной книги... Буду благодарна за советы и науку:) ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 16:39 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
А код-то где? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 16:42 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Может не закрывается, а прячется за окном экселя? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 16:58 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
надо делать надстройку к Excel ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:01 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Если кратко, то вот (в сокращённом варианте та же проблема). Процедура, вызываемая при нажатии кнопки на листе. Листы созданы по одному шаблону, так что обработчик общий. Public Sub RemoveOrder(curSheet As Worksheet) Application.ScreenUpdating = False Application.DisplayAlerts = False If UserForm4.Visible = True Then UserForm4.ListBox1.RemoveItem (UserForm4.ListBox1.ListIndex) curSheet.Delete Application.ScreenUpdating = True End Sub Кнопка на листе: Private Sub CommandButton2_Click() Call RemoveOrder(Me) End Sub Вот собственно и всё... ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:03 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
нужно сделать отдельный модуль, туда перенести вашу процедуру, сделать её паблик, создать макрос с вызовом этой процедуры и привязать его к кнопке на тулбаре или в меню ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:05 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Не прячется, я искала:) Свойство UserForm4.Visible принимает значение False ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:05 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
malemaЕсли кратко, то вот (в сокращённом варианте та же проблема).а можно в виде файла, где проявляется этот глюк? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:08 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Это не глюк. Например, при удалении элемента управления на листе происходит сброс состояния VBA-проекта, ЕМНИП. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:22 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Shocker.Pro, вот файлик, там только основное вместе с глюком. На первом листе вызывается сама форма со списком листом, на остальных листах - кнопка Удалить, после нажатия на которую запускается та процедура удаления. Обратите внимание, при этом форма исчезает. Кода минимум. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:26 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
ЦЦаЭто не глюк. Например, при удалении элемента управления на листе происходит сброс состояния VBA-проектапохоже на то. По крайней мере, форма действительно не прячется, а терминируется. Ну, в принципе, полагаю, можно просто запускать ее вновь после удаления листа ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:34 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
ЦЦа, как же в таком случае поступить? Перенести все кнопки с листа в менюшку, как советовал Konst_One, чтобы не оставалось на листе ни одного элемента управления? (если я правильно поняла). Ещё у меня была мысль перенести эту форму в отдельную книгу, тогда по идее на неё ничего не должно влиять. Но я так и не нашла, как обратиться к форме, которая находится в другой книге, чтобы удалить оттуда лишнюю строку с названием листа, например. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:36 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Shocker.Pro, проблема в том, что вызов процедуры происходит с самого удаляемого листа. Пока этот вызов до конца не обработан - форма висит. Лист удалился - и всё, после этого больше ничего не происходит, все процедуры завершили свою работу. Если б хотя бы существовало событие у книги типа Workbook_SheetDelete, можно было бы туда повторное отображение формы вставить... Всё что я пока придумала - снимать галочку на первом листе, чтобы пользователь повторно её ставил, запуская тем самым форму. Но заказчик капризничает, говорит, что я смухлевать хочу)) И правда некрасиво как-то получается. ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 17:45 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
> проблема в том, что вызов процедуры происходит с самого удаляемого листа Нет. Проблема в том, что удаляется лист с кодом. Если создать на форме кнопку с кодом для удаления текущего листа: Код: vbnet 1. 2. 3. 4. 5.
и удалять листы без кода, все нормально. Но как только удаляешь лист с кнопкой - форма пропадает. > Если б хотя бы существовало событие у книги типа Workbook_SheetDelete, можно было бы туда повторное отображение формы вставить... Не получается. Я пробовал в коде книги отслеживать число листов, и при уменьшении числа (лист удален) вызывать процедуру отображения формы из Лист1 (ее сделал Public) Код: vbnet 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12.
Но при удалении листа с кнопкой код просто не выполняется. Кстати, почему бы не сделать кнопку удаления на форме, а из листов код убрать? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 18:40 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
malemaЯ пытаюсь создать подобие навигатора по листам с помощью UserForm, поскольку листов в книге очень много и ходить по ним неудобно.А Вы знаете про такую штуку, как правый клик по кнопкам перемещения по листам (они слева на панели ярлычков листов)? Может, и форма не нужна? ... |
|||
:
Нравится:
Не нравится:
|
|||
30.08.2012, 18:45 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Казанский, ого! кстати, не знала))) Спасибо)) Но это всё равно не очень удобно в моём случае, поскольку в названиях листов недостаточно информации, и я в своей форме вывожу ещё парочку нужных полей. Короче, понятно, что тут остаётся только смириться. Я перенесла навигатор в отдельную книгу и проблема отпала. Спасибо всем откликнувшимся! Творческих успехов :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 12:26 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
malema, А что, есть желание оставить как есть, с кнопкой "Удалить" именно на листе? Есть вариантик с выносом обработчика событий нажатия кнопки из модуля класса листа в рамках одного VBA-проекта. По крайней мере, можно попробовать. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 12:54 |
|
UserForm пропадает в момент программного удаления листа. VBA
|
|||
---|---|---|---|
#18+
Не, денонсирую. При удалении листа удаляеЦЦа его класс (даже если он пуст) из VBA-проекта с ресетом проекта (и последующей необходимостью его перекомпиляции). Так что вынос кода в другой VBA-проект (книгу или надстройку) будет правильней. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.09.2012, 13:25 |
|
|
start [/forum/topic.php?fid=60&msg=37937496&tid=2157467]: |
0ms |
get settings: |
11ms |
get forum list: |
16ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
76ms |
get topic data: |
9ms |
get forum data: |
2ms |
get page messages: |
54ms |
get tp. blocked users: |
1ms |
others: | 18ms |
total: | 195ms |
0 / 0 |