Использование Clipboard
Мне приходится сохранять книгу Excel в формате *.txt, а потом вставлять файл в документ Word, вообщем муторно. Оченно нужно.
Заранее благодарен!
Подскажите пож-та, каким образом скопировать текст из excela в буфер. Т.е. не ячейку, а именно содержимое ячейки.
Мне приходится сохранять книгу Excel в формате *.txt, а потом вставлять файл в документ Word, вообщем муторно. Оченно нужно.
Заранее благодарен!
Взаимоотношения Экселя и Клипборда можно кратко описать так.
При нажатии КТРЛ+С в буфер помещаются значения выделенных ячеек, столбцы разделены табом, строки - энтером. Но при этом сам Эксель еще помнит информацию о выделенном диапазоне.
Поэтому такие интеллектуевые программы как Ворд и Эксель при вставке "вспоминают" про диапазон, и копируют формулы, форматы и т.п.
Вывод. Используй в качестве пересадочной станции менее продвинутую программу. Идеально для этих целей подходит Блокнот (Notepad).
Из Экселя копируешь в Блокнот, из Блокнота в Ворд.
Хотя, конечно, можно написать и соответствующий макрос.
Взаимоотношения Экселя и Клипборда можно кратко описать так.
Следующий вопрос: как запустить Блокнот из excela, мне нужен способ через VBA и как через VBA управлять процессами в блокноте (т.е. вставить, скопировать, выделить). По-моему это не реально.
Следующий вопрос: как запустить Блокнот из excela, мне нужен способ через VBA и как через VBA управлять процессами в блокноте (т.е. вставить, скопировать, выделить). По-моему это не реально.
Так тебе надо из ВБА это делать? Тогда сразу в Ворд вставляй. Пример такого макроса нужен?
Так тебе надо из ВБА это делать? Тогда сразу в Ворд вставляй. Пример такого макроса нужен?
Уточняю задачу:
Существует таблица в Excel с данными по предприятию ХХХ (название, ИНН, адрес, р/с....).
Мне нужно сформировать Договор в Wordе, т.е. не забивать руками все это дело, а с помощью Visual Basica перетаскивать каждое поле в определённое место в тексте документа (сам текст поля Excel), текст догора не изменяется, клиентов куча, нужна автоматизация.
Существующая на данный момент, глючная технология:
(все делается из макроса Excel)
1) копирую ячейку
2) создаю новую книгу, всавляю туда значение
3) сохраняю книгу в формате *.txt (Unicode)
4) закрываю *.txt
5) запускаю макрос Worda из Excela, который открывает и всавляет файл в документ Word (*.txt).
Таким образом, я сохраняю штук 15 текстовых файлов, и последовательно всавляю их в Договор, в положенные места.
Можно конечно вставлять саму ячейку, но Word очень плохо работает с таблицами, отвратительно, поэтому данная схема будет ещё сложнее в реализации.
При этом приходится исправлять глючный шрифт unicode, при всавке он портит весь абзац, сбивает цетровку, жирность и т.д. (мне это очень надоело).
Прошу помочь. Если есть исходники, то покажите пож-та сам текст макроса, у меня нет возможности скачивать файлы.
Public Sub ПодключитьсяКWord()
'Запускаем Microsoft Word, открываем нужный шаблон
Set MSwd = CreateObject("Word.Application")
MSwd.Visible = True
MSwd.ScreenUpdating = False
MSwd.System.Cursor = 0 'wdCursorWait
MSwd.Documents.Add ThisWorkbook.Path + "\Shablon.dot"
DoEvents
Set Doc = MSwd.ActiveDocument
End Sub
Dim PositWas As Long, PositNew As Long
Dim R1 As Object
PositWas = Doc.Range.End
Doc.Range.InsertAfter (Range("A5").Value)
Doc.Range.InsertParagraphAfter
PositNew = Doc.Range.End
Set R1 = Doc.Range(Start:=PositWas - 1, End:=PositNew - 1)
R1.Style = "Обычный"
End Sub
[\CODE]
Если что не понятно, спрашивай.
Уточняю задачу:
Существует таблица в Excel с данными по предприятию ХХХ (название, ИНН, адрес, р/с....).
Мне нужно сформировать Договор в Wordе, т.е. не забивать руками все это дело, а с помощью Visual Basica перетаскивать каждое поле в определённое место в тексте документа (сам текст поля Excel), текст догора не изменяется, клиентов куча, нужна автоматизация.
Существующая на данный момент, глючная технология:
(все делается из макроса Excel)
1) копирую ячейку
2) создаю новую книгу, всавляю туда значение
3) сохраняю книгу в формате *.txt (Unicode)
4) закрываю *.txt
5) запускаю макрос Worda из Excela, который открывает и всавляет файл в документ Word (*.txt).
Таким образом, я сохраняю штук 15 текстовых файлов, и последовательно всавляю их в Договор, в положенные места.
Можно конечно вставлять саму ячейку, но Word очень плохо работает с таблицами, отвратительно, поэтому данная схема будет ещё сложнее в реализации.
При этом приходится исправлять глючный шрифт unicode, при всавке он портит весь абзац, сбивает цетровку, жирность и т.д. (мне это очень надоело).
Прошу помочь. Если есть исходники, то покажите пож-та сам текст макроса, у меня нет возможности скачивать файлы.
Да я понимаю - "мы не ищем простых путей", а стандартную процедуру слияния в Word почему бы не использовать? И никакких макросов писать не надо!
Да я понимаю - "мы не ищем простых путей", а стандартную процедуру слияния в Word почему бы не использовать? И никакких макросов писать не надо!
Наверное, так тоже можно. Я просто никогда не пользовался этой фичей.
Основная идея такова. Ты подключаешься к Ворду. Примерно так (заодно создается новый документ на основании готового шаблона):
Если что не понятно, спрашивай.
Спасибо огромнейшее, ты просто спас меня. Если не трудно пришли (если есть) ещё какие-нибудь исходники по этой теме.
Еще раз большое спасибо!
Наверное, так тоже можно. Я просто никогда не пользовался этой фичей.
Настоятельно рекомендую попробовать, это очень удобная вещь, я с ее помощью печатал сотни документов в день, один раз готовишь базу в Excel затем готовишь шаблон нужного документа в Word и с помощью мастера вставляешь нужные поля из экзеловского файла, все дальше говоришь куда сливать и идешь пить пиво, машина все делает за тебя.
To stalwart:
Каких-то всеобщих процедурок у меня под рукой нет, так что придется тебе самому писать по аналогии с вышеприведенной ДобавитьВОписание.
Вот разве что еще может оказаться полезным тебе следующий набор строк:
NameDef = "C:\MyDoc\Primer.doc"
With MSwd.Dialogs(&H54)
.Name = NameDef
.AddToMru = True
.Show
End With
Он запускает в Ворде окно Save As с уже написанным именем и папкой из переменной NameDef.
To Gauss:
На досуге поэксперементирую с этим слиянием.
Конечно, бывают и случаи, когда стоит потратить время на самостоятельный макрос. Но когда перекидывать данные надо самому (а не учить этому пользователей своего софта :) ), и когда никаких макросов еще нет, предложенный тобой способ видится очень удобным.
To stalwart:
Каких-то всеобщих процедурок у меня под рукой нет, так что придется тебе самому писать по аналогии с вышеприведенной ДобавитьВОписание.
Возникла ещё одна проблема. При таком управлении wordом из excelа возникает вопрос: "как скопировать таблицу из excela".
Cуществующая на данный момент технология:
Сохраняю файл с таблицей в формате *.xls. Вставляю связь с файлом. Но при этом юзвер не получает право на изменение этой таблички. А как выяснилось позже, ему бы очень хотелось.
doc.paste , Mswd.paste, не подходят.
Че делать подскажи пож-та.
Возникла ещё одна проблема. При таком управлении wordом из excelа возникает вопрос: "как скопировать таблицу из excela".
Cуществующая на данный момент технология:
Сохраняю файл с таблицей в формате *.xls. Вставляю связь с файлом. Но при этом юзвер не получает право на изменение этой таблички. А как выяснилось позже, ему бы очень хотелось.
doc.paste , Mswd.paste, не подходят.
Че делать подскажи пож-та.
Тебе что именно нужно, чтобы в Ворде образовалась обычная Вордовская табличка, в которой были бы соответствующим образом размещены ЗНАЧЕНИЯ экселевских ячеек (короче то, что происходит, когда руками в экселе нажимаешь Ctrl+C, а потом в Ворде Ctrl+V), или чтобы в Ворде была "дверь в Эксель" с возможностью редактирования формул и т.п. (то, что происходит, если перетащить диапазон из окна Экселя в окно Ворда)?
Тебе что именно нужно, чтобы в Ворде образовалась обычная Вордовская табличка, в которой были бы соответствующим образом размещены ЗНАЧЕНИЯ экселевских ячеек (короче то, что происходит, когда руками в экселе нажимаешь Ctrl+C, а потом в Ворде Ctrl+V), или чтобы в Ворде была "дверь в Эксель" с возможностью редактирования формул и т.п. (то, что происходит, если перетащить диапазон из окна Экселя в окно Ворда)?
Мне просто нужно ctrl+c в Excele и ctrl+v в Worde, но при условии, что управление этими процессами происходит из Excela.
Мне просто нужно ctrl+c в Excele и ctrl+v в Worde, но при условии, что управление этими процессами происходит из Excela.
Тогда в рамках тех подключений к Ворду, которые были описаны выше, это выглядит так:
Doc.Styles("Обычный").ParagraphFormat.FirstLineIndent = 0
MSwd.Selection.Paste
Строчка c FirstLineIndent может и не понадобиться, она убирает красную строку, в абзаце.
Скорее всего, тебе надо будет сделать перед MSwd.Selection.Paste соответствующий Select.
Тогда в рамках тех подключений к Ворду, которые были описаны выше, это выглядит так:
Doc.Styles("Обычный").ParagraphFormat.FirstLineIndent = 0
MSwd.Selection.Paste
Строчка c FirstLineIndent может и не понадобиться, она убирает красную строку, в абзаце.
Скорее всего, тебе надо будет сделать перед MSwd.Selection.Paste соответствующий Select.
Спасибо.