С Новым годом! Форум программистов, компьютерный форум, киберфорум
VBA
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.83/6: Рейтинг темы: голосов - 6, средняя оценка - 4.83
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
1

Несанкционированный выброс из цикла

19.12.2012, 18:21. Показов 1245. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Здравствуйте, нужна помощь знающих!
Есть программа, код:
Visual Basic
1
2
3
4
5
6
7
8
9
Sub CmbProg_Click()
 For i = 0 To 6
  If CmbProg.Text = CmbProg.List(i) Then NumberProg = i + 1
 Next i
 If NumberProg <> 7 Then
    For j = 9 To 10
     Rows(j).EntireRow.Hidden = True
    Next j
end if
проблема в том, что при начале второго цикла (где скрываются строки), вместо того,чтобы завершить цикл (скрыть все строки с 9-ой по 16-ую), выполнение программы после j=9 перескакивает снова на самую первую строку программы...а далее, при начале повторного выполнения цикла со скрытием строк-выдается ошибка. Почему так происходит, почему происходит выброс из цикла?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.12.2012, 18:21
Ответы с готовыми решениями:

Выброс числа во время цикла
Такая вот программка - человек вводит первое число(от) и второе (до) куда якобы искать. при...

Несанкционированный доступ
Сегодня ночью по Латвийскому времени, примерно около трёх ночи антивирус заблокировал попытку...

Возможен ли несанкционированный доступ?
Недавно мой ноутбук БЕЗ ВИНЧЕСТЕРА побывал в чужих руках. Есть ли вероятность того что в...

Несанкционированный доступ к компьютеру (RMS)
Доброго времени суток. Собственно, в заголовке вся суть. Доверился человеку, запустил .exe, но...

17
es geht mir gut
11272 / 4756 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
19.12.2012, 19:57 2
А если закомментировать строку

Visual Basic
1
Rows(j).EntireRow.Hidden = True
то всё нормально работает?
1
Заблокирован
19.12.2012, 20:29 3
Chiks, распиши цель задачи нашим языком, пожалста
1
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 10:30  [ТС] 4
Цитата Сообщение от SoftIce Посмотреть сообщение
А если закомментировать строку

Visual Basic
1
Rows(j).EntireRow.Hidden = True
то всё нормально работает?
Да, если закомментить, то все работает нормально...что не правильно в этой строчке-непонятно для меня

Добавлено через 3 минуты
Цитата Сообщение от Апострофф Посмотреть сообщение
Chiks, распиши цель задачи нашим языком, пожалста
Цель: при выборе из выпадающего списка определенного значения -некоторые строки Excel должны отображаться, если выбрано любое другое значение из того же списка, то строки должны скрываться. Но в том коде,что я привел-есть какая-то ошибка,связанная с процедурой скрытия строк-почему то выкидывает из цикла снова на начало выполнения всей процедуры...
0
es geht mir gut
11272 / 4756 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.12.2012, 10:44 5
Цитата Сообщение от Chiks Посмотреть сообщение
Да, если закомментить, то все работает нормально..
Со 99% уверенностью могу сказать, что "выброса" из цикла не происходит, а выполнение кода
Visual Basic
1
Rows(j).EntireRow.Hidden = True
вызывает цепь событий (каких, не могу сказать,не посмотрев код), в конце которой событие CmbProg_Click


Так что всё логично
1
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 10:55  [ТС] 6
Цитата Сообщение от SoftIce Посмотреть сообщение
Со 99% уверенностью могу сказать, что "выброса" из цикла не происходит, а выполнение кода
Visual Basic
1
Rows(j).EntireRow.Hidden = True
вызывает цепь событий (каких, не могу сказать,не посмотрев код), в конце которой событие CmbProg_Click


Так что всё логично
весь код процедуры здесь:

Visual Basic
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
Private Sub CmbProg_Click()
 For i = 0 To 6
  If CmbProg.Text = CmbProg.List(i) Then NumberProg = i + 1
 Next i
 If NumberProg <> 7 Then
    For j = 9 To 16
     Rows(j).EntireRow.Hidden = True
    Next j
    Chk1.Visible = False
    Chk2.Visible = False
    Chk3.Visible = False
    Chk4.Visible = False
    Chk5.Visible = False
    Chk6.Visible = False
    Chk7.Visible = False
 Else
    For i = 9 To 16
     Rows(i).EntireRow.Hidden = False
    Next i
    Chk1.Visible = True
    Chk2.Visible = True
    Chk3.Visible = True
    Chk4.Visible = True
    Chk5.Visible = True
    Chk6.Visible = True
    Chk7.Visible = True
 End If
End Sub
К сожалению, продолжает выкидывать...при пошаговым выполнении, только одна строчка из цикла скрывается а далее процедура начинает выполняться снова...и, когда снова дойдет до цикла с сокрытием строк - вылетает ошибка "Run-time error '1004': Нельзя установить свойство Hidden класса Range"
0
es geht mir gut
11272 / 4756 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.12.2012, 11:02 7
Цитата Сообщение от Chiks Посмотреть сообщение
К сожалению, продолжает выкидывать.



Да не выкидывает из цикла.
Причина не в коде этой процедуры.

Где то в другом месте.

Весь код секретный?
1
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 11:09  [ТС] 8
Да нет, конечно, не секретный))Я весь код дал...ни одной другой строчки кода в данной книге Excel нет...Дело не может быть в настройках Excel на данном конкретном компьютере?
0
Заблокирован
20.12.2012, 11:12 9
Для начала давайте определимся с разделом.
Очевидно речь идёт об VBA?
0
es geht mir gut
11272 / 4756 / 1183
Регистрация: 27.07.2011
Сообщений: 11,439
20.12.2012, 11:13 10
Цитата Сообщение от Chiks Посмотреть сообщение
в данной книге Excel
Книга тоже секретная?
0
Заблокирован
20.12.2012, 11:18 11
Chiks, кем и как заполняется список CmbProg?
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 11:27  [ТС] 12
Цитата Сообщение от SoftIce Посмотреть сообщение
Книга тоже секретная?
Книга вот здесь
Вложения
Тип файла: rar Книга1.rar (25.0 Кб, 6 просмотров)
0
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 11:29  [ТС] 13
Цитата Сообщение от Апострофф Посмотреть сообщение
Chiks, кем и как заполняется список CmbProg?
Список строго задан на том же листе Excel (адреса ячеек прописаны в свойстве ListFillRange списка).
0
1069 / 107 / 4
Регистрация: 19.12.2012
Сообщений: 449
20.12.2012, 11:33 14
1. попробуйте вынести эту строку в отдельную функцию
2. попробуйте переместить вызывающую кнопку в другую область листа (кнопку, листбукс)
3. запретите EnableEvents
4. когда проходите в дебаге и снова выходите (как вы говорите) на первую строку - нажмите Ctrl+L - и изучите порядок вызовов функций (возможно, между вылетом и переходом отрабатывает что-то еще)
0
Заблокирован
20.12.2012, 11:41 15
Chiks, опустите источник списка ниже 16 строки листа и данная проблема исчезнет.
1
0 / 0 / 0
Регистрация: 20.06.2011
Сообщений: 46
20.12.2012, 11:46  [ТС] 16
Цитата Сообщение от Апострофф Посмотреть сообщение
Chiks, опустите источник списка ниже 16 строки листа и данная проблема исчезнет.
Да, благодарю))ступил я сильно)

Добавлено через 1 минуту
Цитата Сообщение от StepInLik Посмотреть сообщение
1. попробуйте вынести эту строку в отдельную функцию
2. попробуйте переместить вызывающую кнопку в другую область листа (кнопку, листбукс)
3. запретите EnableEvents
4. когда проходите в дебаге и снова выходите (как вы говорите) на первую строку - нажмите Ctrl+L - и изучите порядок вызовов функций (возможно, между вылетом и переходом отрабатывает что-то еще)
Спасибо за отклик!не могли бы уточнить мне на будущее, что означает пункт 3?где его можно запретить?
0
6978 / 2879 / 552
Регистрация: 19.10.2012
Сообщений: 8,765
20.12.2012, 12:38 17
В любом месте кода:
Visual Basic
1
Application.EnableEvents=false
Так Эксель не будет реагировать на события, произведённые кодом, да и вообще.
Поэтому не забудьте в конце сделать обратное.
1
15153 / 6426 / 1731
Регистрация: 24.09.2011
Сообщений: 9,999
20.12.2012, 16:02 18
Application.EnableEvents относится к событиям приложения (Worksheet_SelectionChange, Workbook_Open и т.д.).
На события элементов управления эта установка никак не влияет!
Для запрещения обработки событий элементов управления приходится вводить переменную-флаг и проверять ее состояние, например
Visual Basic
1
2
3
4
5
6
7
8
9
10
Dim busy As Boolean 'переменная модуля
 
Private Sub CmbProg_Click()
If busy Then Exit Sub 'немедленный выход из процедуры обработки события
busy = True
 
'здесь код, который может вызвать события и повторный вызов этой процедуры
 
busy = False
End Sub
1
20.12.2012, 16:02
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
20.12.2012, 16:02
Помогаю со студенческими работами здесь

Выброс исключений
Всем привет! Не знаю как правильно представить методы через tcy catch. Сама программа просит...

Выброс из top10
У меня ситуация такая, до сегодняшнего дня по ключевому запросу я находился на 2-ом месте у...

Выброс пользователя
Привет всем. ситуация: под одним виндовс-пользователем запускается 2-3 копии 1с, каждая копия под...

Несанкционированный доступ к БД? Загадочный пользователь 'shuntsov'
Ребята, подскажите, а то поддержка reg.ru динамит и сваливает все на меня самого, а я уже начинаю...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Новые блоги и статьи
Что такое HCL Notes и как с ним работать
InfoMaster 10.01.2025
HCL Notes (ранее известный как IBM Notes и Lotus Notes) представляет собой комплексную платформу для совместной работы и обмена информацией в корпоративной среде. Это многофункциональное решение,. . .
Как работать с Git из Windows и Visual Studio
InfoMaster 10.01.2025
Работа с Git в Windows Работа с Git в операционной системе Windows может быть осуществлена с помощью различных инструментов, каждый из которых обладает своими уникальными возможностями и. . .
Аналог оператора switch case в Python
InfoMaster 10.01.2025
Оператор switch case используется в программировании для выбора одного из нескольких вариантов исполнения кода. Однако в языке Python этот оператор отсутствует. Понимание аналогов switch case в. . .
Отличия абстрактного класса от интерфейса
InfoMaster 10.01.2025
В современной разработке программного обеспечения существуют два основных механизма реализации абстракции: абстрактные классы и интерфейсы. Эти инструменты, хотя и схожи в своей основной цели -. . .
Как работать в Git
InfoMaster 10.01.2025
Git — это одна из наиболее популярных систем контроля версий, которая активно используется разработчиками по всему миру. Она позволяет эффективно управлять изменениями в коде, координировать работу. . .
Реализация передвижения персонажа в Unity3d на C#
InfoMaster 10.01.2025
Реализация передвижения персонажа в Unity3D начинается с правильной настройки проекта. Этот этап критически важен для создания отзывчивого и плавного управления. Рассмотрим основные шаги для создания. . .
Docker: руководство для начинающих
InfoMaster 10.01.2025
В современном мире разработки программного обеспечения контейнеризация стала неотъемлемой частью процесса создания и развертывания приложений. Docker, как ведущая платформа контейнеризации, произвела. . .
Книги и учебные ресурсы по C#
InfoMaster 08.01.2025
Базовые учебники и руководства Одной из лучших книг для начинающих является "C# 10 и . NET 6 для начинающих" Эндрю Троелсена и Филиппа Джепикса . Книга последовательно раскрывает основные концепции. . .
Что такое NullReferenceEx­­­ception и как исправить?
InfoMaster 08.01.2025
NullReferenceException - одно из самых распространенных исключений, с которым сталкиваются разработчики на C#. Это исключение возникает при попытке обратиться к членам объекта (методам, свойствам или. . .
Что такое Null Pointer Exception (NPE) и как это исправить?
InfoMaster 08.01.2025
Null Pointer Exception (NPE) - это одно из самых распространенных исключений в Java, которое возникает при попытке использовать ссылку на объект, значение которой равно null. Это исключение относится. . .
Русский язык в консоли C++
InfoMaster 08.01.2025
При разработке программ на C++ одной из частых проблем, с которой сталкиваются русскоязычные программисты, является корректное отображение кириллицы в консольных приложениях. Эта проблема особенно. . .
Telegram бот на C#
InfoMaster 08.01.2025
Разработка ботов для Telegram стала неотъемлемой частью современной экосистемы мессенджеров. C# предоставляет мощный и удобный инструментарий для создания разнообразных ботов, от простых. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru