Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

Вернуться   Форум программистов > Microsoft Office и VBA > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 15 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Ответ
 
Опции темы
Старый 28.09.2017, 16:41   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию Ошибка Subscript out of range

Здравствуйте Уважаемые программисты!
Подскажите пожалуйста, как в коде ниже (vba excel 2003) на строке выделенной красным цветом устранить появляющуюся ошибку:
Код:
Run-time error '9':
Subscript out of range
Данный код при открытии книги, создает новые листы с таблицами из файла access.
Заранее спасибо!

Код:
Private Sub Workbook_Open()

   Dim conn As ADODB.Connection
   Set conn = New ADODB.Connection
   conn.Open "File Name=c:\connect.udl;"

   Dim xl As New Excel.Application
   Dim Sheet As Worksheet
   Dim wksht As String
   Dim strTables As String
   Dim wkbk As Excel.Workbook

   Dim cat As ADOX.Catalog
   Set cat = New ADOX.Catalog
   cat.ActiveConnection = conn

   Dim tbl As ADOX.Table
   Set tbl = New ADOX.Table

   Dim rs As ADODB.Recordset
   Set rs = New ADODB.Recordset

   Application.ScreenUpdating = False
   xl.DisplayAlerts = False
   With wkbk
      For Each tbl In cat.Tables
         If tbl.Type = "TABLE" Then
            Set rs = conn.Execute("SELECT * FROM " & tbl.Name)
            wksht = tbl.Name
            On Error Resume Next
            Set Sheet = Sheets(wksht)   'на этой строке появляется ошибка
            If Err Then
               Err.Clear
               Sheets.Add After:=Sheets(Sheets.Count)
               Sheets(Sheets.Count).Name = wksht
               i = 1
               Do While Not rs.EOF
                  Sheets(wksht).Cells(i, 1).Value = rs.Fields("Номер")
                  Sheets(wksht).Cells(i, 2).Value = rs.Fields("Элемент")
                  i = i + 1
                  rs.MoveNext
               Loop
            End If
         End If
      Next tbl
   End With
   xl.DisplayAlerts = True

   rs.Close
   conn.Close

   Set rs = Nothing
   Set conn = Nothing
   Set wkbk = Nothing
   Set xl = Nothing
   Set cat = Nothing
   xl.Quit

End Sub
ольгаг вне форума   Ответить с цитированием
Старый 28.09.2017, 16:46   #2
Aleksandr H.
2 the Nation Glory
Профессионал
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Адрес: Wild West Ukraine
Сообщений: 2,624
Репутация: 1049
По умолчанию

Судя по коду ету строку можно удалить. Я бы не стал именовать переменную как Sheet
__________________
Mailto: media.project@ukr.net
Aleksandr H. вне форума   Ответить с цитированием
Старый 28.09.2017, 17:12   #3
IgorGO
МегаМодератор
СуперМодератор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Адрес: УКРАЇНА, Київ
Сообщений: 9,137
Репутация: 1796

icq: 7934250
skype: i2x0,5
По умолчанию

Код:
            wksht = tbl.Name
            On Error Resume Next
            Set Sheet = Sheets(wksht)   'на этой строке появляется ошибка
Вы сначала переменной wksht присваиваете имя таблицы tbl, а потом считаете, что среди листов найдется один с там же именем??? он есть у Вас такой???
__________________
41001804815208 - Яндекс-деньги благодарности за удачные советы и решения можно отправлять прямо сюда)
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете
IgorGO вне форума   Ответить с цитированием
Старый 28.09.2017, 22:50   #4
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию

Да, лист может быть.
ольгаг вне форума   Ответить с цитированием
Старый 30.09.2017, 21:07   #5
Watcher_1
Форумчанин
 
Аватар для Watcher_1
 
Регистрация: 22.06.2011
Сообщений: 325
Репутация: 44
По умолчанию

On Error Resume Next
1) надо вообще вынести за пределы циклов
2) при включении данной опции макрос не должен останавливаться ни на какой ошибке...
3) Было бы проще протестировать на живых данных
__________________
Заказать макрос можно на сайте http://excel4you.ru/
Watcher_1 вне форума   Ответить с цитированием
Старый 01.10.2017, 12:06   #6
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 320
Репутация: 21
По умолчанию

Спасибо!
ольгаг вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка string subscript out of range Pein95 Общие вопросы C/C++ 3 04.10.2013 01:18
Ошибка runtime error '9' subscript out of range BioNoob Microsoft Office Excel 2 05.06.2012 16:33
Очередная ошибка Run-time error 9: subscript out of range klimusik Microsoft Office Excel 7 07.05.2012 00:08
Ошибка Run-time error '9' : Subscript out of range mad_moon Microsoft Office Excel 11 12.12.2011 23:37
Subscript out of range -в чем ошибка Bape}l{ka Microsoft Office Excel 4 14.11.2011 16:26


13:20.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.

Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru