powered by simpleCommunicator - 2.0.53     © 2025 Programmizd 02
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка object reqired при очистке БД
25 сообщений из 37, страница 1 из 2
Ошибка object reqired при очистке БД
    #39442616
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброго времени суток. Пытаюсь сделать программу для импорта данных из таблицы Word в Access.

Нашёл на иностранном сайте код:
Код: 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.
Private Sub cmdImport_Click()
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String
 
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = CurrentProject.Path & "\People.docx"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document
 
    Set dbs = CurrentDb 'establish the database to use (this is our current Database)
    Set rst = dbs.OpenRecordset("tblPeople") 'establish the recordset
 
    With doc.Tables(1) 'target table 1 in People.docx
 
        For i = 2 To .Rows.Count 'cycle through rows in Tables(1) [we skip the first row because the table has headers]
 
            With rst
                .AddNew 'creating a new record
                    ![FName] = doc.Tables(1).Cell(i, 1).Range.Text
                    ![LName] = doc.Tables(1).Cell(i, 2).Range.Text
                    ![SSN] = doc.Tables(1).Cell(i, 3).Range.Text
                    ![PhoneNumber] = doc.Tables(1).Cell(i, 5).Range.Text
                    ![Gender] = doc.Tables(1).Cell(i, 6).Range.Text
                .Update 'update the whole record
            End With
 
        Next 'go to next row in Tables(1)
 
    End With
 
    rst.Close: Set rst = Nothing 'close and clear recordset
    db.Close: Set rst = Nothing 'close and clear database
    doc.Close: Set doc = Nothing 'close and clear document
    appWord.Quit: Set appWord = Nothing 'close and clear MS Word
 
End Sub



Создал в ворде тестовую табличку, создал таблицу в Access для заполнения, перебил код под свой вордовский файл, привёл к такому виду
Код: 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.
Private Sub Кнопка0_Click()
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String
     
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document
     
        Set dbs = CurrentDb 'establish the database to use (this is our current Database)
        Set rst = dbs.OpenRecordset("tblTest") 'establish the recordset
     
        With doc.Tables(1) 'target table 1 in People.docx
     
            For i = 2 To .Rows.Count 'cycle through rows in Tables(1) [we skip the first row because the table has headers]
     
                With rst
                    .AddNew 'creating a new record
                        ![ob] = doc.Tables(1).Cell(i, 1).Range.Text
                        ![smr] = doc.Tables(1).Cell(i, 2).Range.Text
                        ![emm] = doc.Tables(1).Cell(i, 3).Range.Text
                        ![mat] = doc.Tables(1).Cell(i, 4).Range.Text
                    .Update 'update the whole record
                End With
     
            Next 'go to next row in Tables(1)
     
        End With
     
        rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
     
    End Sub



(Строку strDoc = CurrentProject.Path был вынужден заменить на путь, т.к. в таком виде файл не устанавливался)
Пришёл к тому, что при запуске выдаётся object reqired и подчёркивается строка очистки базы данных
Код: vbnet
1.
db.Close: Set rst = Nothing 'close and clear database



Есть также англоязычное видео, где используют этот вот код. Ничего не меняют и всё работает. Не могу понять в чём я провинился
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442622
Predeclared
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Set dbs = CurrentDb

....

db.Close
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442624
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ataxy,
поменяйте местами--база закрывается позже рекордсета
Код: vbnet
1.
2.
 Set rst = Nothing 'close and clear database
db.Close
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442629
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, но ведь по коду итак закрытие базы идёт под рекордсетом?
Я правильно понял? (да, я чайник)
Код: vbnet
1.
2.
3.
4.
5.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        db.Close
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442631
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ataxy,

и в конце каждого параграфа или ячейки таблиці есть служебные символы c кодами 13-10-11-7-9

поєтому строку типа присвоения надо заменить на
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
s1= doc.Tables(1).Cell(i, 1).Range.Text

s1=replace(s1,chr(13)," ")
s1=replace(s1,chr(10)," ")
s1=replace(s1,chr(11)," ")
s1=replace(s1,chr(7)," ")
s1=replace(s1,chr(9)," ")
s1=replace(s1,"  "," ")

 ![FName] =trim(s1)



можно создать функцию, чтобі уменьшить писанину
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442635
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ataxy
Код: vbnet
1.
2.
3.
4.
5.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close: Set rst = Nothing 'close and clear database
        db.Close
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word



зачем ві повторяете строку
Код: vbnet
1.
2.
3.
4.
rst.Close: Set rst = Nothing 'close and clear recordset
        db.Close  'close and clear database
        doc.Close: Set doc = Nothing 'close and clear document
        appWord.Quit: Set appWord = Nothing 'close and clear MS Word
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442638
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, т.е. просто db.Close без Set dbs=Nothing?

По поводу символов. В режиме отображения нечитаемых символов word показывает только символ окончания ячейки. Символов, указанных в таблице ASCII под такими кодами не выводит.

Вы не могли бы написать эту функцию?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442648
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Predeclared, заменил db на dbs - помогло.

ПЕНСИОНЕРКА, при заполнении после каждого значения ставится []. Это, я так понимаю, из-за символов, о которых вы говорили?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39442668
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ataxy,

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
function zamena(n1z)
dim s1
s1= n1z & ""

s1=replace(s1,chr(13)," ")
s1=replace(s1,chr(10)," ")
s1=replace(s1,chr(11)," ")
s1=replace(s1,chr(7)," ")
s1=replace(s1,chr(9)," ")
s1=replace(s1,"  "," ")
zamena=s1
 end function




обращение к ней в вашем коде
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
With rst
                .AddNew 'creating a new record
                    ![FName] = zamena(doc.Tables(1).Cell(i, 1).Range.Text)
                    ![LName] = zamena(doc.Tables(1).Cell(i, 2).Range.Text)
                    ![SSN] = zamena(doc.Tables(1).Cell(i, 3).Range.Text)
                    ![PhoneNumber] = zamena(doc.Tables(1).Cell(i, 5).Range.Text)
                    ![Gender] = zamena(doc.Tables(1).Cell(i, 6).Range.Text)
                .Update 'update the whole record
            End With
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443457
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, огромное вам спасибо за функцию! Работает

Теперь другая проблема. Дорабатываю программу. Хочу сделать, чтобы она могла работать не с одним документом. На форме есть кнопка, с помощью которой выбирается файл и в поле рядом выводится путь к файлу.
Я изменяю
Код: vbnet
1.
2.
3.
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document 


На
Код: vbnet
1.
2.
3.
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = "Forms![Test].Controls![Поле1].Value"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document



Выдаёт ошибку - пишет, что файл не найден. Подчёркивает
Код: vbnet
1.
Set doc = appWord.Documents.Open(strDoc)



Как корректно прописать обращение к значению поля?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443460
Прогер_самоучка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AtaxyПЕНСИОНЕРКА, огромное вам спасибо за функцию! Работает

Теперь другая проблема. Дорабатываю программу. Хочу сделать, чтобы она могла работать не с одним документом. На форме есть кнопка, с помощью которой выбирается файл и в поле рядом выводится путь к файлу.
Я изменяю
Код: vbnet
1.
2.
3.
        Set appWord = CreateObject("Word.Application") 'establish an instance of word
        strDoc = "C:\Documents and Settings\Admin\Рабочий стол\tblTest.docx"  'set string to document path and file
        Set doc = appWord.Documents.Open(strDoc) 'establish the document 



На
Код: vbnet
1.
2.
3.
    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = "Forms![Test].Controls![Поле1].Value"  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document




Выдаёт ошибку - пишет, что файл не найден. Подчёркивает
Код: vbnet
1.
Set doc = appWord.Documents.Open(strDoc)




Как корректно прописать обращение к значению поля?без кавычек
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443535
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Прогер_самоучка, спасибо.
Это не обязательно, конечно. Но, как дополнить процедуру, чтобы она просила выбрать файл, если поле пустое?

Я правильно понял?
Код: vbnet
1.
2.
3.
strDoc = Forms![Test].Controls![Поле1].Value
            If strDoc = Nothing Then MsgBox "Бла-бла-бла"
            End If 



Или нужно объявить новую переменную для поля?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443541
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот так?

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
Dim appWord As Word.Application, doc As Word.Document
Dim dbs As DAO.Database, rst As DAO.Recordset, strDoc As String, fldDir As String

fldDir = Forms![Test].Controls![Поле1].Value
If fldDir<0 Then
MsgBox "Бла-бла-бла!"
End If

    Set appWord = CreateObject("Word.Application") 'establish an instance of word
    strDoc = fldDir  'set string to document path and file
    Set doc = appWord.Documents.Open(strDoc) 'establish the document
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443553
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Не проканало
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443569
Фотография Владимир Саныч
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
А зачем текстовую переменную проверять на "меньше нуля"?

if isnull(Forms![Test].Controls![Поле1].Value) then
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443583
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Владимир Саныч, сейчас попробуем.
А ещё понял, чо прописывать надо в другой процедуре. Вышеупомянутая процедура у меня теперь паблик. Есть процедура _clik, которая запускает запрос на создание таблицы и вызывает процедуру заполнения. Прописать логичней будет в ней, чтобы она не создавала таблицу, пока поле пустое.

авторА зачем текстовую переменную проверять на "меньше нуля"?
Потому что я тупой гуманитарий
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443592
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот да
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
Private Sub Кнопка0_Click()
Dim query As String

query = "CREATE TABLE tblTest (ob CHAR (30), smr CHAR (30), emm CHAR (30), mat CHAR (30))"
DoCmd.RunSQL query
Call Zapolnenie
End Sub



Два вопроса. Как остановить процедуру при нулевом поле? Нужно ли будет потом изменять
Код: vbnet
1.
strDoc = Forms![Test].Controls![Поле1].Value 


в процедуре заполнения?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39443603
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Готово
Код: vbnet
1.
2.
3.
4.
If IsNull(Forms![Test].Controls![Поле1].Value) Then 
MsgBox "Выберите файл" 
Exit Sub 
End If 
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444278
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
С тестовой табличкой программа справляется. А вот целевой таблицей, ради которой всё затевалось, давится и вешает Access
Таблица в документе оформлена столбцами. Символы окончания ячейки, которые должны стоять за правой границей таблицы, стоят только у правого столбца. А таблица, которая должна создаваться и заполняться данными имеет всего 4-5 столбцов. Влияет ли это на процедуру заполнения? Или дело только в том, что в коде не прописана логика обхода ячеек, которые не должны считываться?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444280
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AtaxyТаблица в документе оформлена столбцами.я бы ее сначала перевела в текстовый файл, и затем через импорт ввела в аксесс

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

=================
если ворд -документов много, то применила бы создание единого текстовика по формату(с линкованием)
--имя вордовского файла
--[ob]
--[smr]
--[emm]
--[mat]

весьма шустро работает и возможности по обработке намного больше
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444281
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ataxy,

кстати --у вас похоже есть строки группировки(3 уровня) --их тоже можно вывести полями в текстовик
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444299
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА, перевести в txt и импорировать всмысле ручками? Так мне нельзя, задача стоит программу сделать, чтобы вордовский файл ручками не изменять.

А можно ли программно прописать процедуру перевода в txt?
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444301
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
А по поводу таблицы - вопрос открыт. Если она составлена так, что рекордсет её не переварит как ты ни пыжься, я так и сообщу.
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444319
Фотография ПЕНСИОНЕРКА
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AtaxyПЕНСИОНЕРКА, перевести в txt и импорировать всмысле ручками? Так мне нельзя, задача стоит программу сделать, чтобы вордовский файл ручками не изменять.

А можно ли программно прописать процедуру перевода в txt?


почти наверняка --можно программно сделать ТХТ
но надо посмотреть 2-3 листа, чтобы понять структуру документа
текст можно заменить на условный
...
Рейтинг: 0 / 0
Ошибка object reqired при очистке БД
    #39444333
Ataxy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПЕНСИОНЕРКА,
авторно надо посмотреть 2-3 листа, чтобы понять структуру документа
Расшвыриваться этим документом нельзя мне. Информация может из чужой, но конторы.

В нём всего два листа. На втором листе продублирована шапка таблицы, под которой всего одна позиция таблицы. А в целом таблица в том виде, как на скрине. Идёт в три колонки, 5 столбцов до конца листа, далее справа повторяется шапка и идут вниз столбцы дале по списку.
Шапка Шапка
1 4
2 5
3 6

И местами в столбцах попадаются растянутые ячейки с обобщающей информации (которые, я хоел бы знать как обойти при считывании данных)

Если нужно знать в каком виде хранятся данные в ячейках, смогу обрисовать
...
Рейтинг: 0 / 0
25 сообщений из 37, страница 1 из 2
Форумы / Microsoft Access [игнор отключен] [закрыт для гостей] / Ошибка object reqired при очистке БД
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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