EXEL->WORD

Программирование на Visual Basic for Applications
dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

EXEL->WORD

Сообщение dansityf » 18.06.2003 (Ср) 12:06

Проблема состоит в следующем...
Есть шаблон в Word'е который необходимо автоматически заполнять из Exel переменными.
Как это можно сделать помогите пожалуйста кодом с небольшимми пояснениями, просто ни разу в жизни не програмил на бейсике :))
Мое упущение, но просто надо срочно. Заранее спасибо

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 18.06.2003 (Ср) 12:27

Надо задавать вопрос более понятно, что имеется ввиду под шаблоном, в чем хранятся данные в таблице, в объктах VBA или еще в чем?
Или имеется ввиду шаблон документа, который должен изменятся по данным расположенным в Excel Файле?
Что имеется ввиду под переменными, цифры, текст, и куда собственно они должны вставлятся в абзац, таблицу или еще куда?

dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

Пояснения

Сообщение dansityf » 18.06.2003 (Ср) 12:32

1 Есть документ word с полями для заполнения
2 Есть документ exel с разнообразными данными (текст, цифры)
3 Надо:
автоматически перенести данный из полей exel в нужные поля документа word.

Vitaly1
Брехман
Брехман
 
Сообщения: 1578
Зарегистрирован: 30.12.2002 (Пн) 16:35
Откуда: Russia, Mosсow

Сообщение Vitaly1 » 18.06.2003 (Ср) 12:58

dansityf -
А поля в Word только к одной записи, т.е данные из таблицы Excel , берутся только из одной строки?

dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

Пояснения

Сообщение dansityf » 18.06.2003 (Ср) 13:14

Что мы имеем:
есть документ word в каком то смысла форма для заполниния, где можно исправлять только специальные поля для заполнения, которые имеют свой определенный индификатор (Параметр поля: закладка: ТекстовоеПоле7 например):
дата ....... фирма.......
#через несколько строчек
оплата..... ещечего-нибудь......
#многоточие, это поля для заполнения с определенными параметрами,
а в exel есть форма, и написав макрос можно будет выдирать определенные ячейки и переносить их содержимое в word автоматически.
Ужас какойто вот что значит не сталкиваться никогда в жизни с програмированием в word & exel, даже и объяснить то не могу :))
На самом деле мне бы помог пример кода, если можно с пояснением, вытаскивания содержимого одной ячейки из exel и вставка этого содержимого в word, но тоже в определенное место.
Вот вроде выразился:)

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.06.2003 (Ср) 16:47

В принципе можно обойтись и без программирования. Преобразуешь свой шаблон в документ слияния ("Сервис" - "Письма и рассылки"), а в качестве источника данных выбираешь файл Excel.
Lasciate ogni speranza, voi ch'entrate.

dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

Пояснения

Сообщение dansityf » 18.06.2003 (Ср) 16:51

Это то все понятно но хочется и даже не хочется а надо чтоб нажал на кнопку и усе перенеслось, как палочкой волшебной:))
Помогите пожалуйста, сил уже нет никаких один маленький кодик:)
Я просто даже представления не имею что это там за язык такой и с чем его подают...

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 18.06.2003 (Ср) 17:10

Если ты совсем не знаком с VBA, то я тебе советую использовать все-таки слияние. Там тоже, нажмешь кнопочку "Слияние" и все перенесется.

Если же очень хочется, то я уже домой иду, а пример написать минут 20-30 надо. Так что завтра напишу, если будет интересно.
Lasciate ogni speranza, voi ch'entrate.

dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

Сообщение dansityf » 18.06.2003 (Ср) 17:14

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

alibek
Большой Человек
Большой Человек
 
Сообщения: 14205
Зарегистрирован: 19.04.2002 (Пт) 11:40
Откуда: Russia

Сообщение alibek » 19.06.2003 (Чт) 8:43

Ну держи.
Исходные файлы: файл Excel (с макросами), файл-шаблон Word, нужные поля выделены как закладки. Осуществляем перенос данных из ячейки A1 в закладку под именем "Sample".
В шаблоне Word: там, где должны подставиться данные, пишешь какой-нибудь текст (например "[ClientName]"), сам текст не важен, главное потом выделить этот текст и задать ему имя (поставить закладку).
В книге Excel: в ячейку A1 вводишь какой-нибудь текст, потом добавляешь кнопку, а к кнопке привязываешь следующий код:
Код: Выделить всё
Sub cmdTransfer_Click()
Dim obj As Object, tplName As String, N As String, V As String
Const wdGoToBookmark As Long = &HFFFFFFFF&
V = Range("A1").Text 'текстовое содержимое ячейки A1
Set obj = CreateObject("Word.Application")
tplName = "C:\MyDots\Letter.dot" 'путь и имя файла к твоему файлу-шаблону
N = "Sample" 'имя закладки, куда будет подставлено значение V
obj.Documents.Add(Template:=tplName).Activate
With obj.Selection
  .GoTo What:=wdGoToBookmark, Name:=N
  .TypeText Text:=V
End With
obj.ActiveDocument.BuiltInDocumentProperties("Title") = "Автоматически сгенерированное письмо, дата: " & Format$(Date, "dd.mm.yyyy")
obj.ActiveDocument.Saved = True
obj.Visible = True
Set obj = Nothing
End Sub

Писал аккуратно, ошибок быть не должно.
Lasciate ogni speranza, voi ch'entrate.

dansityf
Начинающий
Начинающий
 
Сообщения: 6
Зарегистрирован: 18.06.2003 (Ср) 11:58

Сообщение dansityf » 19.06.2003 (Чт) 10:02

Спасибо огромное, за помощь очень сильно вы мне помогли:)

PaNo
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 06.10.2006 (Пт) 9:33

Сообщение PaNo » 06.10.2006 (Пт) 9:59

Решил не создавать новой темы, а поднять старую...

В общем то, задача стоит такая же, из Exel данные перебросить в Word в конкретные поля... Взял тут кусочек кода и модифицировал немного..

Мой код должен выполнять следующее... Ставим в документе C:\ФайлДляИмпорта.doc закладки с именами полей как в Exel- A1..A2.. B5.. идем в Ексел, заполняем поля А1:В6..

Вопрос вот в чем: Когда перебрасывает в Word нужные поля, почему-то в первую строку еще вставляет ненужные поля- те, которые по идее не должны попадать в Ворду... Помогите, плз найти косяк :)

Сильно чур, не пинать за кривость кода, VBA увидел только вчера первый раз ;)

Код: Выделить всё

Sub beg()
On Error GoTo Errors1

    Dim a As Boolean
    Dim d As String
    Dim c As Range
       Dim a2 As Boolean
    Dim d2 As String
    Dim c2 As Range
    Dim obj As Object, tplName As String, N As String, V As String, Adr1 As String, Adr2 As String
   
    Const wdGoToBookmark As Long = &HFFFFFFFF
    a = True
    a2 = True
    Set c = Range(ActiveCell.Address)
    c.Select
    d = c.Value
    c.Value = d
   
    '=============
        Set obj = CreateObject("Word.Application")
    tplName = "C:\ФайлДляИмпорта.doc" 'путь и имя файла к твоему файлу-шаблону
    obj.Documents.Add(Template:=tplName).Activate

    '=============
   
    While (a = True)
       
        If (IsEmpty(ActiveCell.Value) = False) Then
            Set c = Range(ActiveCell.Address)
              While (a2 = True)
           
               '===========================
                   If (IsEmpty(ActiveCell.Value) = False) Then
                   Set c2 = Range(ActiveCell.Address)
         
                   V = Range(ActiveCell.Address).Text 'текстовое содержимое ячейки A1
                   N = ActiveCell.Address 'имя закладки, куда будет подставлено значение V
                   
                   Adr1 = Right(N, 3)          'Удаляем из строки с адресом ячейки символы $
                   Adr1 = Left(Adr1, 1)         'Чтобы получить имя закладки типа А1...А2
                   Adr2 = Right(N, 1)
                   Adr1 = Adr1 + Adr2
                   N = Adr1
             
            With obj.Selection
             .GoTo What:=wdGoToBookmark, Name:=N
             .TypeText Text:=V
            End With
           
Errors1:             'Обработка ошибки, когда не находит закладку с нужным именем в ворде
Resume Select1
     
           
Select1:
                     c2.Select
                     d2 = c2.Value
                     c2.Value = d2
                    Else
                    a2 = False
                    End If
         '===========================
             ActiveCell.Offset(1, 0).Select
         
             Wend
             
         a2 = True
           
            c.Select
            d = c.Value
            c.Value = d
        Else
            a = False
        End If
         ActiveCell.Offset(0, 1).Select
    Wend
   
obj.ActiveDocument.BuiltinDocumentProperties("Title") = "Автоматически сгенерированное письмо, дата: " & Format$(Date, "dd.mm.yyyy")
obj.ActiveDocument.Saved = True
obj.Visible = True
Set obj = Nothing
   
End Sub



Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 06.10.2006 (Пт) 12:51

Думаю, что лучше так
Код: Выделить всё
Sub beg()
    Dim obj     As Object
    Dim N       As String
    Dim rng     As Range
    Dim c       As Range
    Const wdGoToBookmark As Long = &HFFFFFFFF
   
    Set rng = ThisWorkbook.Sheets(1).Range("A1:B6") 'диапазон обрабатываемых ячеек, можно несвязанный "A1:B3, C6:E8"
   
    Set obj = CreateObject("Word.Application")
    obj.Documents.Add("c:\Закладки.doc").Activate

    On Error Resume Next
    For Each c In rng 'цикл по каждой ячейке диапазона
        N = Trim(Replace(c.Address, "$", "")) 'получение адреса
        'Debug.Print N
        With obj.Selection
         .GoTo What:=wdGoToBookmark, Name:=N
         If Err.Number <> 0 And Err.Number <> 5101 Then 'Если есть ошибка и эта ошибка не "Закладка не найдена" выходим из программы
            MsgBox "Error " & Err.Number & " " & Err.Description
            Exit Sub
         End If
         
         .TypeText Text:=c.Text
        End With
    Next
   
obj.ActiveDocument.BuiltinDocumentProperties("Title") = "Автоматически сгенерированное письмо, дата: " & Format$(Date, "dd.mm.yyyy")
obj.ActiveDocument.Saved = True
obj.Visible = True
Set obj = Nothing
   
End Sub

PaNo
Начинающий
Начинающий
 
Сообщения: 2
Зарегистрирован: 06.10.2006 (Пт) 9:33

Сообщение PaNo » 06.10.2006 (Пт) 14:07

=) Спасибо! Теперь вижу, насколько мой код неуклюжий! ;)

Только ошибка то осталась.... Ввел закладки A1,B1,B2 в ворде... Получил значение из Екселя в нужных полях, но ненужные данные в начале файла всёравно остались :( Глюки МСОффиса?
Получился файлик ворда:

Код: Выделить всё
A5A4b4A3A2b2


A1

         B3


   B1

Wasup!
Продвинутый пользователь
Продвинутый пользователь
 
Сообщения: 120
Зарегистрирован: 21.06.2005 (Вт) 11:09

Сообщение Wasup! » 11.10.2006 (Ср) 11:41

Возможно, стоит попробовать на другом компьютере. У меня таких ненужных данных не было.
Еще можно перенести obj.Visible = True после Set obj = CreateObject("Word.Application"), выполнить макрос по шагам (F8) и посмотреть в какой момент возникают эти данные.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: Google-бот, Mail.ru [бот] и гости: 82

    TopList