При выполнении кода VBA, Excel вылетает

Программирование на Visual Basic for Applications
DenisBondar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.07.2003 (Ср) 14:00

При выполнении кода VBA, Excel вылетает

Сообщение DenisBondar » 09.07.2003 (Ср) 14:10

Есть следующий код:

Public Sub FillImpList()
lbImp.Clear
lbImpDel.Clear
lbImpEdited.Clear
For i = 2 To 65536
If Worksheets("ImpData").Cells(i, 1) = "" Then
Exit For
End If
If Worksheets("ImpData").Cells(i, 1) = cbPersonNo.Value And _
Worksheets("ImpData").Cells(i, 1).Interior.ColorIndex <> 3 Then
Dim s As String
s = Worksheets("ImpData").Cells(i, 2).Text
Me.lbImp.AddItem (s)
Me.lbImp.List(lbImp.ListCount - 1, 1) = Worksheets("ImpData").Cells(i, 3).Text
Me.lbImp.List(lbImp.ListCount - 1, 2) = Worksheets("ImpData").Cells(i, 4).Text

Me.lbImpDel.AddItem s
Me.lbImpDel.List(Me.lbImpDel.ListCount - 1, 1) = Worksheets("ImpData").Cells(i, 3).Text
Me.lbImpDel.List(Me.lbImpDel.ListCount - 1, 2) = Worksheets("ImpData").Cells(i, 4).Text
End If
Next i
End Sub

При выполнении выполненной строки Excel вылетает. Значение переменной s в отладчике просматривается корректно. Но, что самое интересное, что если сделать точку останова до этой строки, то весь код проходит нормально без вылета экселя и в дальнейшем, пока не закроешь эксель все нормально работает.
Excel 97 SP2
Могу выслать все исходники для анализа

Спасибо.
Денис

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.07.2003 (Чт) 7:09

Хм, список импов! Оригинально! :D
Я бы посоветовал скобки удалить вокруг S. Для очистки совести.

Кстати, сколь контролов-то на форме? Не около 500 случаем? А то знаем мы такие маньячности :wink:
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 10.07.2003 (Чт) 9:14

ну и еще пару замечаний
1. вынеси объявление s за пределы цикла а то объявлять переменную цать тысяч раз жестоко
2. ну и вместо for я бы поставил что-то вроде
i = 2
do while Worksheets("ImpData").Cells(i, 1) <> ""
'твой цикл
i=i+1
loop
хотя это только IMHO
Ничто так не ограничивает полёт мысли программиста, как компилятор

DenisBondar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.07.2003 (Ср) 14:00

Сообщение DenisBondar » 10.07.2003 (Чт) 10:10

Спасибо за ответы!

Скобки я добавил от безысходности :), без них было тоже самое
Контролов не больше 20 на шите и не больше 100 в книге

Объявление переменной вынес, цикл заменил - ексель вылетает по прежнему
Буду рад новым предложениям

GSerg
Шаман
Шаман
 
Сообщения: 14286
Зарегистрирован: 14.12.2002 (Сб) 5:25
Откуда: Магадан

Сообщение GSerg » 10.07.2003 (Чт) 10:17

Неужели тот же случай, что и у IgorOK? Странно! :?
Попробуй все упоминания контролов, находящихся на форме, заменить на такое: frmMyForm.Controls("MyControl")
Как ни странно, это помогло...
Как только вы переберёте все варианты решения и не найдёте нужного, тут же обнаружится решение, простое и очевидное для всех, кроме вас

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 10.07.2003 (Чт) 10:54

Насколько понимаю что это происходит только при первом проходе цикла а потом все проходит замечательно :?:
если это так то
1. что находится в первой строчке (ну или на которой он вылетает)
2. если попробовать вместо строки s подстваить что-нидь попроще типа "aaa"
зы если не трудно пришли свою книгу или изменяй свое первое сообщение чтобы код соответствовал нынешней ситуации
Ничто так не ограничивает полёт мысли программиста, как компилятор

DenisBondar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.07.2003 (Ср) 14:00

Сообщение DenisBondar » 10.07.2003 (Чт) 16:18

GSerg писал(а):Неужели тот же случай, что и у IgorOK? Странно! :?
Попробуй все упоминания контролов, находящихся на форме, заменить на такое: frmMyForm.Controls("MyControl")
Как ни странно, это помогло...


У меня элементы управления находятся не на форме, а на листе!

DenisBondar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.07.2003 (Ср) 14:00

Сообщение DenisBondar » 10.07.2003 (Чт) 16:21

corgi писал(а):Насколько понимаю что это происходит только при первом проходе цикла а потом все проходит замечательно :?:
если это так то
1. что находится в первой строчке (ну или на которой он вылетает)
2. если попробовать вместо строки s подстваить что-нидь попроще типа "aaa"
зы если не трудно пришли свою книгу или изменяй свое первое сообщение чтобы код соответствовал нынешней ситуации

1. там текстовая строка небольшой (около 20 символов)
2. пробовал. эффект тотже

corgi
ToyMan
ToyMan
 
Сообщения: 1367
Зарегистрирован: 01.10.2002 (Вт) 9:59
Откуда: Россия, Москва

Сообщение corgi » 10.07.2003 (Чт) 22:46

убери отовсюду me
покрайней мере напиши так lbImp.AddItem s
Ничто так не ограничивает полёт мысли программиста, как компилятор

DenisBondar
Начинающий
Начинающий
 
Сообщения: 5
Зарегистрирован: 09.07.2003 (Ср) 14:00

Сообщение DenisBondar » 11.07.2003 (Пт) 13:29

Все советы выполнил. Ничего не помогло.
Поможите люди добры...
Очень нужно чтобы работало, т.к. более сотни человек подсадил на свою разработку :(
Проверил код в Office XP - работает без сбоев.

Public Sub FillImpList()
lbImp.Clear
lbImpDel.Clear
lbImpEdited.Clear
Dim s As String
i = 2
Do While Worksheets("ImpData").Cells(i, 1) <> ""
If Worksheets("ImpData").Cells(i, 1) = cbPersonNo.Value And _
Worksheets("ImpData").Cells(i, 1).Interior.ColorIndex <> 3 Then
s = Worksheets("ImpData").Cells(i, 2).Text
lbImp.AddItem s
lbImp.List(lbImp.ListCount - 1, 1) = Worksheets("ImpData").Cells(i, 3).Text
lbImp.List(lbImp.ListCount - 1, 2) = Worksheets("ImpData").Cells(i, 4).Text

lbImpDel.AddItem s
lbImpDel.List(lbImpDel.ListCount - 1, 1) = Worksheets("ImpData").Cells(i, 3).Text
lbImpDel.List(lbImpDel.ListCount - 1, 2) = Worksheets("ImpData").Cells(i, 4).Text
End If
i = i + 1
Loop
End Sub

Calvin
Постоялец
Постоялец
 
Сообщения: 409
Зарегистрирован: 21.01.2003 (Вт) 12:13
Откуда: Sebastopol

Сообщение Calvin » 11.07.2003 (Пт) 15:35

Может условие
Код: Выделить всё
If Worksheets("ImpData").Cells(i, 1) = cbPersonNo.Value And _
Worksheets("ImpData").Cells(i, 1).Interior.ColorIndex <> 3 Then
........

удовлетворяется множество раз (допустим больше чем 255 раз) и добавляется в контрол запись (lbImpDel.AddItem s
)?
...проверь? :roll:
-Whose the motocycle, is this? -It`s a chopper, baby! -Whose chopper is this? -Zed`s! -Who is Zed? -Zed`s dead, baby, Zed`s dead! :-D


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот и гости: 10

    TopList