Страницы: 1
RSS
vba-импорт из книги в userform: макрос зависает
 
Добрый вечер! Благодаря планете при импортировании данных в свои userform из других файлов excel пользовалась нижеприведенным макросом. Макрос запускается прямо с userform по кнопке. Для правильного импорта было необходимо проверить, является ли выбранный пользователем файл корректным путем обращения к содержимому "проверочной" ячейки на скрытом листе.  
Для этого надо было учесть что нужного листа может не быть (при выборе некорректного файла).  
До недавнего времени все прекрасно работало, однако в новом проекте потребовалось запускать макрос несколько раз подряд, импортируя данные из новых и новых файлов и процесс стал зависать, соскакивая на невыключающееся MsgBox со строки "L1: ".  
При Ctrl+Break дебаггер выделяет элемент ": Resume L2" этой строки.  
Отыскать косяк в алгоритме не могу - помогите, пожалуйста!  
 
Sub Import_Calc()  
Dim tip As Integer  
Dim fName As String  
fName = GetFileName  
On Error GoTo L1  
If Len(fName) Then  
   With GetObject(fName)  
       With .Sheets("СкрытыйЛист")  
           Application.EnableEvents = False  
           Application.ScreenUpdating = False  
           If .[C1] = "проверка" Then
               MsgBox "Перенос данных запущен."  
 
              [перенос данных]
 
               MsgBox "Перенос данных успешно завершен."  
           Else  
               MsgBox "Выбранный файл не может использоваться для переноса данных."  
               Exit Sub  
           End If  
           Application.EnableEvents = True  
       End With  
L2:     .Close False  
   End With  
End If  
L1: If Err Then MsgBox "Выбранный файл не может использоваться для переноса данных.", vbCritical: Resume L2  
End Sub
 
Я бы написал код так:  
 
Sub Import_Calc()  
   Dim tip As Integer, fName As String, res As String  
   fName = GetFileName  
   If Len(fName) = 0 Then MsgBox "Файл не выбран": Exit Sub  
   On Error Resume Next: Err.Clear  
 
   With GetObject(fName)  
       res = .Sheets("СкрытыйЛист").[C1]
       If Err <> 0 Or res <> "проверка" Then  
           MsgBox "Выбранный файл не может использоваться для переноса данных.", vbCritical  
       Else  
           With .Sheets("СкрытыйЛист")  
               Application.EnableEvents = False  
               MsgBox "Перенос данных запущен."  
               Application.ScreenUpdating = False  
 
               '[перенос данных]
 
               MsgBox "Перенос данных успешно завершен."  
               Application.EnableEvents = True  
           End With  
       End If  
       .Close False  
   End With  
End Sub
 
Позвольте полюбопытствовать в чужой теме  
Почему  
On Error Resume Next: Err.Clear  
а не  
On Error Resume Next  
На всякий случай, хуже не будет, или я что-то не улавливаю?  
 
#77676#
 
EducatedFool, спасибо Вам - работает без накладок.  
Единственное огорчение: после работы макроса импорта (и прежнего, и предложенного Вами) при перемещении окна формы остается неубираемый шлейф формы на мониторе. Как Вы считаете, это проблема непосредственно операций переноса данных?
 
Здесь был аналогичный вопрос: http://www.planetaexcel.ru/forum.php?thread_id=35386
 
Вероятно в коде есть select и activate скрытого листа?
 
{quote}{login=Hugo}{date=16.12.2011 11:30}{thema=}{post}Вероятно в коде есть select и activate скрытого листа?{/post}{/quote}  
 
Только Select Case по данным скрытого листа. Если использовать If Else можно избежать шлейфа?
 
Select Case - это другое, этот селект не мешает :)  
Может быть можете сокращённый пример в файле показать?
 
{quote}{login=Hugo}{date=16.12.2011 12:24}{thema=}{post}Select Case - это другое, этот селект не мешает :)  
Может быть можете сокращённый пример в файле показать?{/post}{/quote}  
 
Если сам код - во вложении.  
Если для решения проблемы нужен весь пример - скажите, постараюсь максимально урезать имеющееся и выложить.
 
У меня вариантов нет. Если никто больше ничего не подскажет - давайте файлы с формой.
 
Сложно увидеть шлейф от формы без самой формы :-)
 
Уважаемые форумчане, как ни билась, уменьшить до приемлимых размеров не смогла. Потому разбила на тома по 100 Кб и выкладываю по очереди 2 файла.  
Внутри сама форма (planeta.xls) и документ для импорта (planetaZ.xls).  
Форма стартует при запуске файла, далее надо нажать кнопку в нижнем левом углу формы "импортировать данные" и выбрать файл для импорта. После удачного импорта при перемещении формы остается шлейф.  
<EM><STRONG>Файл удален</STRONG> - велик размер - [<STRONG>МОДЕРАТОРЫ</STRONG>]</EM>
 
второй файл
 
{quote}{login=Black__Hole}{date=16.12.2011 04:41}{thema=Re: }{post}Уважаемые форумчане, как ни билась, уменьшить до приемлимых размеров не смогла. Потому разбила на тома по 100 Кб и выкладываю по очереди 2 файла.{/post}{/quote}Black__Hole, так дело не пойдёт: а если бы у Вас было 500К, Вы разделили бы на 5 разных файлов? Кто мешает положить на файлообменник?
 
{quote}{login=Black__Hole}{date=16.12.2011 11:18}{thema=}{post}EducatedFool, спасибо Вам - работает без накладок.  
Единственное огорчение: после работы макроса импорта (и прежнего, и предложенного Вами) при перемещении окна формы остается неубираемый шлейф формы на мониторе. Как Вы считаете, это проблема непосредственно операций переноса данных?{/post}{/quote}Попробуйте не отключать обновление экрана (код не смотрел)
Чебурашка стал символом олимпийских игр. А чего достиг ты?
Тишина - самый громкий звук


https://github.com/nervgh
 
{quote}{login=Юрий М}{date=16.12.2011 04:50}{thema=Re: Re: }{post}{quote}{login=Black__Hole}{date=16.12.2011 04:41}{thema=Re: }{post}Уважаемые форумчане, как ни билась, уменьшить до приемлимых размеров не смогла. Потому разбила на тома по 100 Кб и выкладываю по очереди 2 файла.{/post}{/quote}Black__Hole, так дело не пойдёт: а если бы у Вас было 500К, Вы разделили бы на 5 разных файлов? Кто мешает положить на файлообменник?{/post}{/quote}  
Выход на файлолбменники закрыты сисадминами. В таком случае, выложить файлы ранее 21.00 не получится. И получить ответ - тоже.. :(
 
nerv, вот Вы и нашли проблему: помнится, была на планете дискуссия на тему того, почему в начале кода стоит отключение обновлений, а в конце - нет строки обратного включения. Автор кода еще обиделся на вопрос.  
А сейчас я добавила строку с включение обновлений по завершению переноса данных и шлейф исчез! :)
 
>> Выход на файлолбменники закрыты сисадминами. В таком случае, выложить файлы ранее 21.00 не получится. И получить ответ - тоже..    
В таком случае попросите меня, сбросив мне на почту, а я выложу на файлобменник.
Страницы: 1
Наверх