Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

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

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

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 28.09.2017, 15:41   #1
ольгаг
Форумчанин
 
Регистрация: 22.02.2010
Сообщений: 325
По умолчанию Ошибка 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, 15:46   #2
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Судя по коду ету строку можно удалить. Я бы не стал именовать переменную как Sheet
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 28.09.2017, 16:12   #3
IgorGO
Новичок
СтарожилДжуниор
 
Аватар для IgorGO
 
Регистрация: 05.02.2008
Сообщений: 9,487
По умолчанию

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

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

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

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


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ошибка 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