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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 04.05.2013, 20:38   #1
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию Работа с типом поля "вложение" из vba

Прошу помощи в данном вопросе. Ибо что то в таком ступоре, что не знаю как и начать реализацию сабжа. Что файл БД расти будет - не страшно, там внутри будет около 20-30 документов (шаблоны dotx, xltx). Что касается самого вопроса: в идеале необходима реализация открытия того или иного файла прямо из БД, для чистовой правки (так как "отчет" реализовать "начисто" не представляется возможным, например, если на выходе получаем некий договор). Как вставлять в открытый из шаблона документ я знаю.
Как мне кажется есть два пути реализации:
I путь:
1. Извлекаем из таблицы с шаблонами файл "вложения"
2. Открываем этот шаблон (например это dotx, и он должен открыться в word)
3. Забиваем необходимую информацию из формы в открытый документ word
4. Вносим "чистовые" правки (под "чистовыми" я понимаю форматирование документа на случай уползания полей и т.п.) и печатаем.
II путь примерно то же самое, но открытие происходит как бы из памяти (буфера обмена), куда будет выгружен шаблон (может быть и открыть можно сразу из БД не файл dotx, а уже на шаблоне построенный docx).

Это что касается работы изнутри. Для пользователя все сведется к нажатию кнопки "экспорт" - и должен открыться файл для правки, либо "печать" - файл сразу идет на печать. Дальше этот открытый файл не нужен - все необходимое есть в БД.

Вобщем, прошу совета с чего тут можно начать (гуглить пытался, но что то либо я не то ищу либо гугл меня не понимает). В идеале, может у кого есть рабочий кусок кода, с которого можно будет подсмотреть реализацию. Либо файлик с БД, где это реализовано.

access 2007, 2010, 2013.

Последний раз редактировалось smoky; 04.05.2013 в 21:37.
smoky вне форума Ответить с цитированием
Старый 11.05.2013, 23:03   #2
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию

Решение. Правда не с полем "вложение". OLE мне понравилось больше
Перед тем как все запускать - 2 условия:
1. На поле ставим присоединенную рамку объекта
2. В настройках редактора VBA ставим tools -> references -> microsoft word (excel) x.x object library
Код:
        Dim oBOF As BoundObjectFrame
        Set oBOF = Form.Controls("ole_source") ' это размещаем на форме присоединенную рамку объекта
        oBOF = DLookup("[поле]", "таблица", "[поле_для_отбора_шаблона] = 'значение'") ' таблица с шаблонами
        oBOF.Verb = acOLEVerbOpen
        oBOF.Action = acOLEActivate
        Dim oWord As Word.Application
        Set oWord = GetObject(, "Word.Application")
        Dim oDoc As Word.Document
        Set oDoc = oWord.ActiveDocument
        oWord.Visible = True
        oWord.ActiveWindow.WindowState = wdWindowStateMaximize
        oDoc.Activate
        
        ' Передаем информацию в закладки, предварительно проверяя - есть ли вообще такая закладка
        If oDoc.Bookmarks.Exists("закладка") = True Then
            oDoc.Bookmarks("закладка").Range.Text = "что вставить"
        End If
        ........
Почему нужна проверка на наличие закладки? Можно применить вот такой обходчик закладок (я сначала им "проверял" закладки):
Код:
For i = 1 To oDoc.Bookmarks.Count
     If oDoc.Bookmarks(i).Name = "закладка" Then
          oDoc.Bookmarks("закладка").Range.Text = "что вставить"
     End If
     ........
Next i
Но у меня оно работало с ошибками. В коде этого обходчика порядка 40-50 проверок закладок, используемых в разных шаблонах (уж так мне захотелось - лень было описывать для каждого документа свои коды, да и многие закладки совпадали). Так вот при прохождении обходчиком закладок возникала ошибка "5941 Запрашиваемый номер семейства не существует". Причем срабатывала она только на определенных закладках (хотя код был написан весь правильно). Как я понял - из за того, что при вставке "что вставить" в "закладка" эта самая "закладка" удалялась, что вызывало глюк у цикла for...next.
В общем, теперь при нажатии кнопки открывается определенный для данного случая шаблон и заполняется данными из формы.
Может у кого то есть свои наработки? хотелось бы услышать )
smoky вне форума Ответить с цитированием
Старый 12.05.2013, 20:36   #3
Teslenko_EA
Участник клуба
 
Регистрация: 10.08.2009
Сообщений: 1,796
По умолчанию

Здравствуйте smoky.
"..Может у кого то есть свои наработки?.." - возможно, но Ваш код тоже вполне жизнеспособен,
я бы немножко его подредактировал.
Код:
Sub toBkmDoc()
Dim o, oBOF As BoundObjectFrame, oWord As Word.Application, oDoc As Word.Document
Set oBOF = Form.Controls("ole_source") ' это размещаем на форме присоединенную рамку объекта
oBOF = DLookup("[поле]", "таблица", "[поле_для_отбора_шаблона] = 'значение'") ' таблица с шаблонами
' 'значение' - это очевидно имя файла (шаблона)
On Error Resume Next
oBOF.Verb = acOLEVerbOpen: oBOF.Action = acOLEActivate
Set oWord = GetObject(, "Word.Application")
If Not Err.Number = 0 Then Err.Clear: Exit Sub
For Each o In oWord.Documents
    If o.Name = "значение" Then
        Set oDoc = o
        Exit For
    End If
Next
If Not oDoc Is Nothing Then
'   для упрощения раскладки данных по меткам можно использовать массивы
    Dim v0(), v1()
'   в первый помещаются имена меток
    v0 = Array("Bkm0", "Bkm1", "Bkm2", "BkmN")
    ReDim v1(UBound(v0))
'   второй заполняется данными соответствующими меткам, возможно во внешней процедуре
    v1(0) = ""
    v1(1) = ""
    v1(2) = ""
    '...
    v1(N) = ""
'   и данные передаются в документ
    For i = LBound(v0) To UBound(v0)
        For Each o In oDoc.Bookmarks
            If v0(i) = o.Name Then
                o.Range.Text = v1(i)
                Exit For
            End If
        Next
    Next
    oWord.Visible = True
    oWord.ActiveWindow.WindowState = 1
    oDoc.Activate
End If
End Sub
Евгений.
Teslenko_EA вне форума Ответить с цитированием
Старый 12.05.2013, 23:07   #4
smoky
Пользователь Подтвердите свой е-майл
 
Регистрация: 13.05.2008
Сообщений: 65
По умолчанию

Интересное решение. Надо посмотреть как оно по скорости обработки. Если руки дойдут до тестов - обязательно сравню результаты.
On Error Resume Next - зловредная немного затычка. На момент отладки ее лучше отключить, имхо.
А "Значение" нужно для нахождения в таблице с шаблонами именного того самого, для которого мы заполняем поля на форме.
smoky вне форума Ответить с цитированием
Старый 03.05.2014, 13:31   #5
Liana88
 
Регистрация: 18.11.2013
Сообщений: 4
По умолчанию экспорт в шаблон Word

Ребят, на любом примере покажите экспорт из формы в шаблон Word!!!!!плиииииииииз
Liana88 вне форума Ответить с цитированием
Старый 03.05.2014, 14:50   #6
shanemac51
Участник клуба
 
Аватар для shanemac51
 
Регистрация: 12.08.2010
Сообщений: 1,079
По умолчанию

существует 3 разных варианта экспорта в ворд
--пакетное |-слияние-|для некой выборки из таблицы сформировать на базе некого шаблона 1 документ-
--пакетное |-закладки-|для некой выборки в n_документов из таблицы сформировать на базе некого шаблона n-документов
--
--индивидуальное|-я называю замена-|для некоторой строки таблицы(формы) сформировать пакет на основе n-шаблонов в 1 или n-документов c многократным вхождением некого поля
Имя-Галина== почта shanemac51@yandex.ru скайп shanemac51 c 8-15мск будни
Сфера интересов--word-excel-access-распознавание
shanemac51 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
работа функциями "ЕСЛИ", "И" и вывод текстового результата johny_03 Microsoft Office Excel 3 04.08.2014 11:01
Поле "Вложение" LexxSakhalin Microsoft Office Access 0 17.04.2012 03:04
Поле "Вложение" многопользовательский режим vint2 Microsoft Office Access 1 21.04.2011 17:56
при вводе на листе "магазин"- код товара появлялось "описание" товара из "склада" с "продажной ценой" aleksei78 Microsoft Office Excel 13 25.08.2009 12:04