powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error 9
16 сообщений из 16, страница 1 из 1
Run-time error 9
    #39196435
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Здравствуйте.

В ВДА плохо разбираюсь. Использую функции написанные прошлым сотрудником.
Есть функция, которая обновляет Excel файл.

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
Option Compare Database
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function obn()

DoCmd.SetWarnings False

FileCopy "C:\Users\Maxim\Desktop\Акт.xlsx", "C:\Users\Maxim\Desktop\Акт\Акт1.xlsx"
freshlong ("C:\Users\Maxim\Desktop\Акт\Акт1.xlsx")


End Function


Function freshlong(b1 As String)
Dim book1 As Excel.Workbook
Dim sheet1 As Excel.Worksheet
Dim pt1 As Excel.PivotTable
Dim i, j As Integer
Set book1 = Excel.Workbooks.Open(b1)
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
Next
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count > 0 Then
For j = 1 To sheet1.PivotTables.Count
Set pt1 = sheet1.PivotTables(j)
pt1.RefreshTable
Sleep (500)
Next
End If
Next
Excel.Application.DisplayAlerts = False
book1.Close savechanges:=True
End Function



Код работал на Access 2003. Попробовал прокрутить его у себя дома на 2013 Accesse. Выдает ошибку:
Run-time error 9: Subscript out of range.

На строке: sheet1.ListObjects.Item(1).QueryTable.Refresh



Подскажите в чем проблема.
...
Рейтинг: 0 / 0
Run-time error 9
    #39196447
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть таблица в Access. В ней 10000 строк. 5 столбцов.(Адрес, ЮрЛицо, Дата, Выручка, ИД)
В ВБА сделал модуль. Который берет ИД 1. Создает таблицы с Адресом, ЮрЛицом, Выручкой и Датой, которые соответствуют этому ИД. Эти таблицы привязаны к Excel. И используются для заполнения документов.
Я хотел перебором от 1 до 10000 создать разные 10000 файлов Excel. Может ошибка из-за того что я хочу обновить Excel файл который привязан к таблицам из этой же базы данных?
...
Рейтинг: 0 / 0
Run-time error 9
    #39196488
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сделал создание таблиц с данными в другой базе, что бы избежать блокировку. Ошибка осталась.

Код: vbnet
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.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
Option Compare Database
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

Function perekresni()


Dim i As Integer
DoCmd.SetWarnings False


For i = 1 To 6



DoCmd.RunSQL "SELECT [Модуль].[ИД] INTO [АААИД] IN 'C:\Users\Maxim\Desktop\Новая папка (2)\Данные.mdb' FROM [Модуль] WHERE ((([Модуль].[ИД])=" & i & "));"


DoCmd.RunSQL "SELECT [Модуль].[Дата] INTO [АААДАТА] IN 'C:\Users\Maxim\Desktop\Новая папка (2)\Данные.mdb' FROM [Модуль] WHERE ((([Модуль].[ИД])=" & i & "));"


DoCmd.RunSQL "SELECT [Модуль].[ЮрЛ] INTO [АААЮЛ] IN 'C:\Users\Maxim\Desktop\Новая папка (2)\Данные.mdb' FROM [Модуль] WHERE ((([Модуль].[ИД])=" & i & "));"


DoCmd.RunSQL "SELECT [Модуль].[ПолнАдр] INTO [ААААДР] IN 'C:\Users\Maxim\Desktop\Новая папка (2)\Данные.mdb' FROM [Модуль] WHERE ((([Модуль].[ИД])=" & i & "));"


DoCmd.RunSQL "SELECT [Модуль].[Sum-ПродРуб] AS [Сумма] INTO [АААСУМ] IN 'C:\Users\Maxim\Desktop\Новая папка (2)\Данные.mdb' FROM [Модуль] WHERE ((([Модуль].[ИД])=" & i & "));"


FileCopy "C:\Users\Maxim\Desktop\Акт.xlsx", "C:\Users\Maxim\Desktop\Акты\Акт_инкассации_№_" & i & ".xlsx"
freshlong ("C:\Users\Maxim\Desktop\Акты\Акт_инкассации_№_" & i & ".xlsx")


Next i


End Function


Function freshlong(b1 As String)
Dim book1 As Excel.Workbook
Dim sheet1 As Excel.Worksheet
Dim pt1 As Excel.PivotTable
Dim i, j As Integer
Set book1 = Excel.Workbooks.Open(b1)
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
Next
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count > 0 Then
For j = 1 To sheet1.PivotTables.Count
Set pt1 = sheet1.PivotTables(j)
pt1.RefreshTable
Sleep (500)
Next
End If
Next
Excel.Application.DisplayAlerts = False
book1.Close savechanges:=True
End Function

...
Рейтинг: 0 / 0
Run-time error 9
    #39196492
Фотография Shocker.Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не, тут ошибка не в данных и даже не в Аксессе и не в его версии.
Данная строка имеет отношение исключительно к Экселю Надо полагать, что на домашнем компьютере, у вас другая версия не только Аксесса, но и Экселя.

Ошибка означает, что в sheet1.ListObjects отсутствует Item с индексом 1.
Либо используете не тот файл, либо проблема в версии Экселя.
Тут мелькает периодически, что в новых версиях Экселя вроде как отказались от объектов ActiveX на листе, возможно, связано именно с этим, но я не сталкивался с этим, надеюсь, коллеги поподробнее подскажут.
...
Рейтинг: 0 / 0
Run-time error 9
    #39196502
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Shocker.Pro,

Access более старый, но весь остальной офис 2013. Такой же как дома.
...
Рейтинг: 0 / 0
Run-time error 9
    #39196507
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
И пробовал сохранить в Excel 97. Тоже не помагло
...
Рейтинг: 0 / 0
Run-time error 9
    #39196696
Фотография i45
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_MaxRun-time error 9: Subscript out of range.

На строке: sheet1.ListObjects.Item(1).QueryTable.Refresh

Подскажите в чем проблема.


Попробуйте

sheet1.ListObjects.Item( 0 ).QueryTable.Refresh
...
Рейтинг: 0 / 0
Run-time error 9
    #39221329
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
i45,

Извиняюсь что долго не отвечал. Сильно нагрузили работой.

Ваш совет не сработал. Все равно ошибка эта всплывает. Причем если зайти и обновить вручную, все работает без сбоев.

Есть еще советы по моей проблеме. Нужно в налоговую отчитаться до 1 мая. Очень нужна помощь.
...
Рейтинг: 0 / 0
Run-time error 9
    #39221422
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_Max, Shocker.Pro давно дал ответ - явно нет Вашего ListObjects.Item(1) на листе.
Сколько листов в книге вообще? Как называются? На всех ли, кроме того, где в названии есть "служ" есть таблицы?
Попробуйте перед строкой
Код: vbnet
1.
sheet1.ListObjects.Item(1).QueryTable.Refresh


записать такую:
Код: vbnet
1.
Msgbox "На листе " & sheet1 & sheet1.ListObjects.Count & " таблиц"



тогда для каждого листа Вам покажет сколько у Вас там объектов ListObjects
...
Рейтинг: 0 / 0
Run-time error 9
    #39221442
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristСколько листов в книге вообще?

3. На 1 листе ссылки на 5 таблиц из Access. На 2 листе акт, в котором используются данные из этих 5 таблиц. На 3 листе просто алгоритм. что бы числа переводить в текст.

The_PristКак называются?

1,2, служ

The_PristНа всех ли, кроме того, где в названии есть "служ" есть таблицы?

Да. На листе 1 - 5 таблиц. На листе 2 нет таблиц, привязанных к Access. Но затык происходит на листе 1.

The_Pristтогда для каждого листа Вам покажет сколько у Вас там объектов ListObjects

Выпадает ошибка RunTime 438. Но если навести мышкой в режиме Дебаг на sheet1.ListObjects.Count, то всплывает подсказка: "sheet1.ListObjects.Count=5"
...
Рейтинг: 0 / 0
Run-time error 9
    #39221644
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_MaxВыпадает ошибка RunTime 438.Мой косяк. Забыл свойство указать:
Код: vbnet
1.
MsgBox "На листе " & sheet1.Name & " " & sheet1.ListObjects.Count & " таблиц"
...
Рейтинг: 0 / 0
Run-time error 9
    #39221648
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_MaxНа листе 2 нет таблицА вот как раз это и является причиной изначальной ошибки. У Вас же таблицы судя по коду просматриваются на всех листах, кроме "служ"(точнее содержащих "служ").
Попробуйте этот блок
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
Next


записать так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.ListObjects.Count > 0 Then
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
End If
Next
...
Рейтинг: 0 / 0
Run-time error 9
    #39221667
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristIm_MaxВыпадает ошибка RunTime 438.Мой косяк. Забыл свойство указать:
Код: vbnet
1.
MsgBox "На листе " & sheet1.Name & " " & sheet1.ListObjects.Count & " таблиц"



Пишет: на листе 1 5 таблиц.
...
Рейтинг: 0 / 0
Run-time error 9
    #39221682
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristIm_MaxНа листе 2 нет таблицА вот как раз это и является причиной изначальной ошибки. У Вас же таблицы судя по коду просматриваются на всех листах, кроме "служ"(точнее содержащих "служ").
Попробуйте этот блок
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
Next


записать так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
For i = 1 To book1.Worksheets.Count
Set sheet1 = book1.Worksheets(i)
If sheet1.ListObjects.Count > 0 Then
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If
End If
Next



Заработало! Файлы обновляются. Перебор идет. Только один недочет. Как я уже писал, привязка на листе 1 идет к 5 таблицам. В первой Дата, во второй Адрес подразделения и т.д. Они вставляются в разные места на листе 2. Так вот, идет обновление только первой таблицы с датой. Она же обновляется и на листе 2. Остальные 4 таблицы остаются неизменными.
...
Рейтинг: 0 / 0
Run-time error 9
    #39221727
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Im_Max,

Вполне возможно, что здесь
Код: vbnet
1.
2.
3.
4.
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
sheet1.ListObjects.Item(1).QueryTable.Refresh
Sleep (500)
End If


надо изменить так:
Код: vbnet
1.
2.
3.
4.
5.
6.
If sheet1.PivotTables.Count = 0 And (sheet1.Name Like "*служ*") = False Then
For each lstOb in sheet1.ListObjects
lstOb.QueryTable.Refresh
Sleep (500)
next
End If


Естественно, вначале кода надо объявить новую переменную:
Код: vbnet
1.
Dim lstOb as Object
...
Рейтинг: 0 / 0
Run-time error 9
    #39228616
Im_Max
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_Prist,

ОГРОМНОЕ спасибо. Работает. За день создал 20000 документов. Руками бы умер это делать.
...
Рейтинг: 0 / 0
16 сообщений из 16, страница 1 из 1
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / Run-time error 9
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]