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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 31.01.2013, 11:44   #1
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию значение из экселя в переменную ворд

Доброго времени суток, Ув. Форумчане
Подскажите пожалуйста, как из значения ячейки (cells(1,1)) активного листа передать в переменную ворд это значение (точнее присвоить переменной col значение cells(1,1)).
Попробовал через Public в экселе, не получилось... в интернете мало что написано ((((
Спасибо
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 31.01.2013, 11:48   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А макрос из Word запускается?
Как получаете доступ к запущенному приложению Excel?

Лень писать код целиком - покажите что есть, мы подправим.
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2013, 11:53   #3
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

есть Ваш код ))) CreateWordDocuments2
Код:
Const ИмяФайлаШаблона = "шаблон.dot"
Const КоличествоОбрабатываемыхСтолбцов = 8
Const РасширениеСоздаваемыхФайлов = ".doc"

Sub СформироватьДоговоры()
    ПутьШаблона = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, ИмяФайлаШаблона)
    НоваяПапка = NewFolderName & Application.PathSeparator
    Dim row As Range, pi As New ProgressIndicator
    r = Cells(Rows.Count, "A").End(xlUp).row: rc = r - 2
    If rc < 1 Then MsgBox "Строк для обработки не найдено", vbCritical: Exit Sub

    pi.Show "Формирование договоров": pi.ShowPercents = True: s1 = 10: s2 = 90: p = s1: a = (s2 - s1) / rc
    pi.StartNewAction , s1, "Запуск приложения Microsoft Word"

    ' Dim WA As Word.Application, WD As Word.Document: Set WA = New Word.Application    ' c подключением библиотеки Word
    Dim WA As Object, WD As Object: Set WA = CreateObject("Word.Application")    ' без подключения библиотеки Word

    For Each row In ActiveSheet.Rows("3:" & r)
        With row
            ФИО = Trim$(.Cells(1)) & " " & Trim$(.Cells(2)) & " " & Trim$(.Cells(3))
            Filename = НоваяПапка & ФИО & РасширениеСоздаваемыхФайлов

            pi.StartNewAction p, p + a / 3, "Создание нового файла на основании шаблона", ФИО
            Set WD = WA.Documents.Add(ПутьШаблона): DoEvents

            pi.StartNewAction p + a / 3, p + a * 2 / 3, "Замена данных ...", ФИО
            For i = 1 To КоличествоОбрабатываемыхСтолбцов
                FindText = Cells(1, i): ReplaceText = Trim$(.Cells(i))

                ' так почему-то заменяет не всё (не затрагивает таблицу)
                'WA.Selection.Find.Execute FindText, , , , , , , wdFindContinue, False, ReplaceText, True

                pi.line3 = "Заменяется поле " & FindText
                With WD.Range.Find
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
                DoEvents
            Next i
            pi.StartNewAction p + a * 2 / 3, p + a, "Сохранение файла ...", ФИО, " "
            WD.SaveAs Filename: WD.Close False: DoEvents
            p = p + a
        End With
    Next row

    pi.StartNewAction s2, , "Завершение работы приложения Microsoft Word", " ", " "
    WA.Quit False: pi.Hide
    msg = "Сформировано " & rc & " договоров. Все они находятся в папке" & vbNewLine & НоваяПапка
    MsgBox msg, vbInformation, "Готово"
End Sub

Function NewFolderName() As String
    NewFolderName = Replace(ThisWorkbook.FullName, ThisWorkbook.Name, "Договоры, сформированные " & Get_Now)
    MkDir NewFolderName
End Function

Function Get_Date() As String: Get_Date = Replace(Replace(DateValue(Now), "/", "-"), ".", "-"): End Function
Function Get_Time() As String: Get_Time = Replace(TimeValue(Now), ":", "-"): End Function
Function Get_Now() As String: Get_Now = Get_Date & " в " & Get_Time: End Function
только в место

Код:
With WD.Range.Find
                    .Text = FindText
                    .Replacement.Text = ReplaceText
                    .Forward = True
                    .Wrap = 1
                    .Format = False: .MatchCase = False
                    .MatchWholeWord = False
                    .MatchWildcards = False
                    .MatchSoundsLike = False
                    .MatchAllWordForms = False
                    .Execute Replace:=2
                End With
пытаюсь в ворде сделать так:
Код:
Sub shUp()

Dim rng As Range
Dim sh As Shape, b
For Each sh In ActiveDocument.Shapes
    b = sh.Name
    With sh.TextFrame
        If .HasText <> 0 Then
            Set rng = .TextRange
            rng.Find.Text = FindText
            rng.Find.Execute
            If rng.Find.Found Then
               rng.Text = ReplaceText
            End If
        End If
    End With
Next sh

End Sub
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 31.01.2013, 12:05   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

А зачем вам мой код?

Мой код подставляет данные из Excel в Word, но будучи запущенным из Excel

Если вы намерены сделать всё в стиле «per rectum», забирая макросом в ворде данные из Excel, то макрос надо переписывать «с нуля»

И мне надо видеть не мой макрос, и ваш, вордовский.
И не это - Sub shUp()
А нормальный большой макрос, который подключается к открытому Excel
через GetObject(,"Excel.Application"), чтобы взять из него данные.

--------------------------

PS: Ну а всем остальным читателям этой темы, кому надо формировать документы, но лень часами ковыряться в коде макросов,
предложу готовое решение, позволяющее заполнить документы Word нажатием одной кнопки:
http://excelvba.ru/programmes/FillDocuments

--------------------------
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2013, 12:12   #5
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
готовое решение, позволяющее заполнить документы Word нажатием одной кнопки:
http://excelvba.ru/programmes/FillDocuments
сейчас попробуем готовое решение. спасибо за ответ.
Я смотрел по вашему коду, как вы делаете открытие документа.
Спасибо Вам большое!
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 31.01.2013, 12:17   #6
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

EducatedFool, не могу скачать ваш фаил:
http://excelvba.ru/programmes/FillDocuments
в место скачивания просто открывается пустая страничка... Не знаете в чем может быть проблема?
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 31.01.2013, 12:20   #7
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Какой браузер? какой версии?
Вроде как, во всех браузерах нормально скачивается.

Прямая ссылка на загрузку сегодняшней версии программы:
http://excelvba.ru/updates/FillDocum...ents_v2129.xla


PS: Правда, моя программа пока не умеет подставлять данные в фигуры в Word
Это можно реализовать, но... форматирвоание текста фигуры, если оно различается для разных слов, будет скидываться.
Чтобы сохранить форматирование текста в фигуре (например, первое слово - жирным шрифтом, второе - нет, а третье - вообще красное),
придется заметно усложнять код.

Последний раз редактировалось EducatedFool; 31.01.2013 в 12:22.
EducatedFool вне форума Ответить с цитированием
Старый 31.01.2013, 12:27   #8
staniiislav
Форумчанин
 
Аватар для staniiislav
 
Регистрация: 16.04.2010
Сообщений: 695
По умолчанию

Цитата:
Сообщение от EducatedFool Посмотреть сообщение
Какой браузер? какой версии?
Вроде как, во всех браузерах нормально скачивается.

Прямая ссылка на загрузку сегодняшней версии программы:
http://excelvba.ru/updates/FillDocum...ents_v2129.xla


PS: Правда, моя программа пока не умеет подставлять данные в фигуры в Word
Это можно реализовать, но... форматирвоание текста фигуры, если оно различается для разных слов, будет скидываться.
Чтобы сохранить форматирование текста в фигуре (например, первое слово - жирным шрифтом, второе - нет, а третье - вообще красное),
придется заметно усложнять код.
понял... да может и без фигур смогу обойтись... на пробовать все.
на работе админы наверное опять играются ))) в обед попробую...
Будем думать. Спасибо
Единственный способ стать умнее, играть с более умным противником...
staniiislav вне форума Ответить с цитированием
Старый 12.02.2015, 08:05   #9
SirSAS
 
Регистрация: 30.12.2010
Сообщений: 8
По умолчанию

Цитата:
Сообщение от staniiislav Посмотреть сообщение
Доброго времени суток, Ув. Форумчане
Подскажите пожалуйста, как из значения ячейки (cells(1,1)) активного листа передать в переменную ворд это значение (точнее присвоить переменной col значение cells(1,1)).
Попробовал через Public в экселе, не получилось... в интернете мало что написано ((((
Спасибо
Добрый день! У меня тоже актуально встал этот вопрос.
1. Есть файл исходных данных и параметров Excel
2. Есть шаблон Word, который трансформируется в зависимости от некоторых параметров Excel

Подскажите, как мне получить значение ячейки в переменную макроса Word?

Я сделал это путем вставки связанной ячейки и проверки поля, но хотелось бы обойтись без этих лишних манипуляций. Привожу свой код:
Код:
Dim oFld As Field
   
    For Each oFld In ActiveDocument.Fields
    If oFld.Type = wdFieldLink Then 'Если поле является полем ссылки
        If InStr(oFld.Code.Text, "R1C8") <> 0 Then 'Если поле ссылается на ячейку Excel
            oFld.Code.Select
            Selection.Fields.Update
            If oFld.Result.Text = 1 Then NDSvalue = True Else: NDSvalue = False
        Exit For
        End If
    End If
    Next
SirSAS вне форума Ответить с цитированием
Старый 13.02.2015, 07:19   #10
maksim_serg
Форумчанин
 
Аватар для maksim_serg
 
Регистрация: 25.03.2010
Сообщений: 417
По умолчанию

я этой пользуюсь
формирование документов word по шаблону из Excel
http://programmy.bb777.ru/index.php?id=60

Последний раз редактировалось maksim_serg; 13.02.2015 в 07:23.
maksim_serg вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Нумерация листов ворд-документа, запущенного из экселя?? wolf05632 Microsoft Office Excel 3 23.04.2011 13:27
Из Экселя ячейку в ворд и сохранить файл с именем ячейки Zhenya2030 Microsoft Office Word 1 19.07.2010 15:36
Перенос форм из Экселя в Ворд Nash1 Microsoft Office Word 5 07.07.2009 06:32
Перенести таблицы Экселя в Ворд Nash1 Фриланс 5 02.07.2009 09:46
Копирование участка текста из Экселя в Ворд Devourer12345 Microsoft Office Excel 3 30.07.2008 08:13