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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 26.04.2017, 17:07   #1
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию VBA, Access, Импорт данных

Здравствуйте.
Требуется написать процедуру, с помощью которой можно было бы импортировать данные из таблицы word в таблицу access. Целевая таблица имеется.

Сейчас моя процедура заполнения выглядит так:
Код:
Public Sub Zapolnenie()
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") 
    strDoc = Forms![Test].Controls![Поле1].Value  
    Set doc = appWord.Documents.Open(strDoc) 
 
    Set dbs = CurrentDb 
    Set rst = dbs.OpenRecordset("tblTest") 
 
    With doc.Tables(1) 
 
        For i = 2 To .Rows.Count 
 
            With rst
                .AddNew 'creating a new record
                    ![col1] = zamena(doc.Tables(1).Cell(i, 1).Range.Text)
                    ![col2] = zamena(doc.Tables(1).Cell(i, 2).Range.Text)
                    ![col3] = zamena(doc.Tables(1).Cell(i, 3).Range.Text)
                    ![col4] = zamena(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
    dbs.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
    
    MsgBox "Таблица заполнена"
End Sub
Нужная таблица содержит растянутые ячейки, которые следует обойти при считывании данных. Подскажите как доработать
Ethex вне форума Ответить с цитированием
Старый 28.04.2017, 00:05   #2
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Проблема решилась
Ethex вне форума Ответить с цитированием
Старый 28.04.2017, 08:14   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Ethex Посмотреть сообщение
Проблема решилась
Как?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 30.04.2017, 20:10   #4
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Условие на длинну текста

Код:
If Len(doc.Tables(1).Cell(i, 1).Range.Text) < 20 Then
Ethex вне форума Ответить с цитированием
Старый 05.05.2017, 20:27   #5
Ethex
Пользователь
 
Регистрация: 26.04.2017
Сообщений: 86
По умолчанию

Такс, ув. пользователи. Случилась беда сковорода.
Сидел себе, пописывал модули для своей формы. Заглянул в условие задачи, понял что немного перепутал с названием полей. Начал редактировать код.

Код процедуры, которая некогда работала:
Код:
Public Sub Zapolnenie()
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") 
    strDoc = Forms![Test].Controls![Поле1].Value  
    Set doc = appWord.Documents.Open(strDoc) 
 
    Set dbs = CurrentDb 
    Set rst = dbs.OpenRecordset("tblTest") 
 
    With doc.Tables(1) 
 
        For i = 2 To .Rows.Count 
 
        If Len(doc.Tables(1).Cell(i, 1).Range.Text) < 20 Then
            
             With rst
                .AddNew 'creating a new record
                    ![ob] = zamena(doc.Tables(1).Cell(i, 1).Range.Text)
                    ![smr] = zamena(doc.Tables(1).Cell(i, 2).Range.Text)
                    ![emm] = zamena(doc.Tables(1).Cell(i, 3).Range.Text)
                    ![mat] = zamena(doc.Tables(1).Cell(i, 4).Range.Text)
                    
                .Update 'update the whole record
            End With
            End If
        Next 'go to next row in Tables(1)
 
    End With
 
    rst.Close: Set rst = Nothing 'close and clear recordset
    dbs.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
    
    MsgBox "Таблица заполнена"
End Sub
Эта процедура вызывается из следующей:
Код:
Private Sub Кнопка0_Click()
Dim query As String

If IsNull(Forms![Test].Controls![Поле1].Value) Then
MsgBox "Выберите файл"
Exit Sub
End If

query = "CREATE TABLE tblTest (ob CHAR (30), smr CHAR (30), ozp CHAR (30), emm CHAR (30))"
DoCmd.RunSQL query
Call Zapolnenie
End Sub
В запросе на создание таблицы я изменил название полей. В вызываемой процедуре я заменил отредактировал эту часть:
Код:
With rst
                .AddNew 
                    ![ob] = zamena(doc.Tables(1).Cell(i, 2).Range.Text)
                    ![smr] = zamena(doc.Tables(1).Cell(i, 3).Range.Text)
                    ![ozp] = zamena(doc.Tables(1).Cell(i, 4).Range.Text)
                    ![emm] = zamena(doc.Tables(1).Cell(i, 5).Range.Text)
                    
                    .Update 
                End With
Ведь названия полей в ней, как я понял, больше нигде не задействованы.
Когда я выбираю файл, затем жму на кнопку на форме Access зависает. После того, как отключаю его и включаю снова, видно пустую таблицу, соданную запросом (т.е. запрос выполнялся, стало быть, дело в вызываемой процедуре заполнения, ведь так?).
Подскажите, где я накрутил?

Новую тему создавать не стал, т.к., модуль тот же
Ethex вне форума Ответить с цитированием
Старый 05.05.2017, 22:43   #6
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

Цитата:
Сообщение от Ethex Посмотреть сообщение
запрос выполнялся, стало быть, дело в вызываемой процедуре заполнения, ведь так?)
протрассируй ее и увидишь строку ошибочную. В чем проблема?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Импорт данных из Access в Excel qwertynkk Microsoft Office Access 4 30.05.2013 13:44
Импорт данных из Excel в Access alexvav БД в Delphi 2 22.06.2012 16:17
импорт данных из Excel в Access mr.kot Microsoft Office Access 3 13.11.2011 22:55
Импорт внешних данных из Access Caside Microsoft Office Excel 7 05.05.2011 11:58
Импорт данных VBA Lyubov1990 Microsoft Office Excel 5 05.06.2009 15:22