Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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


Донат для форума - использовать для поднятия настроения себе и модераторам

А ещё здесь можно купить рекламу за 25 тыс руб в месяц! ) пишите сюда - alarforum@yandex.ru

Закрытая тема
Ваша тема закрыта, почему это могло произойти? Возможно,
Название темы включает слова - "Помогите", "Спасите", "Срочно"
Название темы не отражает сути вашего вопроса.
Тема исчерпала себя, помните, один вопрос - одна тема
Прочитайте >>>правила <<< и заново правильно создайте тему.
 
Опции темы
Старый 27.07.2008, 22:14   #21
knyz
Пользователь
 
Регистрация: 27.07.2008
Адрес: Украина, Ахтырка
Сообщений: 12
Репутация: 10
По умолчанию

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

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

Последний раз редактировалось knyz; 28.07.2008 в 08:51.
knyz вне форума  
Старый 28.07.2008, 09:32   #22
Serge_Bliznykov
МегаМодератор
СуперМодератор
 
Регистрация: 09.01.2008
Сообщений: 26,031
Репутация: 5656
По умолчанию

1) что в вашем понимании "с определённым форматированием" ?
2) чем не устраивает Selection.Copy
3) как именно Вы вставляете в Word? руками?
в принципе, попробуйте в ворд включить Макрос -Запись - потом
вставьте текст и отформатируйте. завершить запись. получите готовый макрос ;-)
Serge_Bliznykov вне форума  
Старый 28.07.2008, 09:35   #23
SAS888
Профессионал
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,162
Репутация: 1127
По умолчанию

Если я правильно понял, то нужно скопировать содержимое ячейки (объединенной или нет, не важно) в документ Word в виде текста (не таблицы) с сохранением всего того ( формат, шрифт, цвет и т.д.), что было подготовлено в копируемой ячейке?
Если так, то посмотрите вложение. Пусть, например, есть файл "Test.doc", который находится в той же папке, что и наш xls-файл. Выделить подготовленную ячейку и нажать кнопку. Макрос откроет Word, откроет "Test.doc" и скопирует требуемый текст в позицию курсора. В коде подробные комментарии. В целях упрощения, не производится никаких проверок (открыт ли файл, существует ли файл и т.д.). Если нужно - добавьте по мере надобности.
Вложения
Тип файла: rar InsWord.rar (10.7 Кб, 60 просмотров)
SAS888 вне форума  
Старый 28.07.2008, 10:16   #24
дмидми
Форумчанин
 
Аватар для дмидми
 
Регистрация: 06.03.2008
Сообщений: 352
Репутация: 80
Лампочка SendKeys - дело тёмное

SAS888,
я бы не связывался с SendKeys без крайней необходимости.
SendKeys "^{Insert}", True 'Копируем в буфер обмена выделенный диапазон в Excel
можно заменить на
Selection.Copy
, а
SendKeys "+{Insert}", True 'Вставляем в Word данные из буфера обмена
можно заменить на
Selection.PasteExcelTable False, False, False
. Кроме того, при копировании одной ячейки Word не создаёт таблицу (вставляется просто параграф).

Получилось
Код:
Sub CopyFromExcelToWord()
    Dim wdApp As Object, wdDoc As Object
'''    SendKeys "^{Insert}", True 'Копируем в буфер обмена выделенный диапазон в Excel
    Selection.Copy  '''
'Открываем Word и файл "Test" (позднее связывание)
    Set wdApp = CreateObject("Word.Application")
    Set wdDoc = wdApp.Documents.Open(ThisWorkbook.Path & "\Test.doc")
    wdApp.Visible = True: wdApp.Activate
'''    SendKeys "+{Insert}", True 'Вставляем в Word данные из буфера обмена
    Selection.PasteExcelTable False, False, False   '''
    Application.CutCopyMode = False '''
''''Убираем таблицу, сохраняя формат данных
'''    With wdApp
'''        .Selection.GoTo What:=wdGoToTable
'''        .Selection.Rows.ConvertToText
'''    End With
'Уничтожим созданные объекты (освобождая используемую память)
    Set wdApp = Nothing
    Set wdDoc = Nothing
End Sub
дмидми вне форума  
Старый 28.07.2008, 10:56   #25
VictorM
Профессионал
 
Аватар для VictorM
 
Регистрация: 15.05.2008
Адрес: Луганск
Сообщений: 2,055
Репутация: 274

icq: 1-702-732
skype: victor11129
По умолчанию

в коде, приведенном дмидми, у меня VBE почему-то "ругается" на строку
Код:
Selection.PasteExcelTable False, False, False
заменил на
Код:
Call wdDoc.Range.PasteExcelTable(False, False, False)
все заработало...
__________________
"Дайте людям рыбы, и вы накормите их на весь день; научите их ловить рыбу - и вы накормите их на всю жизнь"
"Большое спасибо" - Z261597841314, R208907249777, U447361470499
VictorM вне форума  
Старый 28.07.2008, 10:57   #26
SAS888
Профессионал
 
Аватар для SAS888
 
Регистрация: 05.12.2007
Сообщений: 4,162
Репутация: 1127
По умолчанию

дмидми. Соглашусь с Вами. Хотя, разницы не вижу. Все, что здесь предлагается, это, так сказать, наброски (болванки), руководство к действию. С одной ячейкой, тоже все в порядке (см.вложение). А с методом "SendKeys", действительно, нужно следить за тем, какое приложение активно, или использовать ожидание ( ,True). Т.е. Ваш код рациональнее (но это не говорит о том, что мой не рабочий).
SAS888 вне форума  
Старый 28.07.2008, 13:02   #27
knyz
Пользователь
 
Регистрация: 27.07.2008
Адрес: Украина, Ахтырка
Сообщений: 12
Репутация: 10
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
1) что в вашем понимании "с определённым форматированием" ?
2) чем не устраивает Selection.Copy
3) как именно Вы вставляете в Word? руками?
в принципе, попробуйте в ворд включить Макрос -Запись - потом
вставьте текст и отформатируйте. завершить запись. получите готовый макрос ;-)
1) Должен сохраниться размер и название шрифта.
2) Selection.Copy копирует ячейку как ячейку таблицы (рамку), а она мне в ворде не нужна.
3)В ворде я выбираю место куда надо вставить и нажимаю "вставить"


Вот весь код :
Код:
 'слияние ячеек без удаления текста
 Sub MergeToOneCell()
    Dim MyDataObj As New DataObject
    Dim S As String
    Const sDELIM As String = ", "
    Dim rCell As Range
    Dim sMergeStr As String
    If TypeName(Selection) <> "Range" Then Exit Sub
    If Not Status Then Exit Sub
    Call SaveUndoInfo(Selection)
    With Selection
        For Each rCell In .Cells
            sMergeStr = sMergeStr & sDELIM & rCell.Text
        Next rCell
        Application.DisplayAlerts = False
        .Merge Across:=False
        Application.DisplayAlerts = True
        .Item(1).Value = Mid(sMergeStr, 1 + Len(sDELIM))
        ActiveCell.Formula = Mid(sMergeStr, 1 + Len(sDELIM))
       

 With ActiveCell.Characters(Start:=1, Length:=25).Font
        .Name = "Arial"
        .FontStyle = "обычный"
        .Size = 10
        .Strikethrough = False
        .Superscript = False
        .Subscript = False
        .OutlineFont = False
        .Shadow = False
        .Underline = xlUnderlineStyleNone
        .ColorIndex = xlAutomatic
       
        
    End With
    
    S = LCase(CStr(ActiveCell.Value))
    MyDataObj.SetText S
    MyDataObj.PutInClipboard
        
        
    End With
    
 End Sub
Я расчитывал что сохраниться форматирование текста, не сохраняется, в ворде похоже надо поменять параметры вставки.
Далее в проекте задумано одновременную добавку в буфер текста, дословно :""" (позиции тендера№ ххх) - предложены (выпадающий список фирм );"""". Список хочу сделать в виде базы данных в отдельном документе ексель.
всё это мной затеяно для автоматизации создания тендерного протокола, тока знаний не хватает....
_____________
С уважением.

Последний раз редактировалось knyz; 28.07.2008 в 13:54.
knyz вне форума  
Старый 30.12.2008, 11:30   #28
atamansha
Новичок
 
Регистрация: 29.12.2008
Сообщений: 1
Репутация: 10
По умолчанию Смена регистра

Здравствуйте! Извините, не разобралась, где создавать новую тему, поэтому пишу сюда.
Есть табличка в екселе с 3 столбцами: ФИО, должность, абривиатура отдела.
И есть вордовский документ, в котором мне нужно заменять данные о сотрудниках на данные из списка в екселе.
Написала макрос и все хорошо работает, но есть одна проблема: в екселе в столбце "Должность" во всех ячейках текст начинается с ЗАГЛАВНОЙ буквы, а вставлять его нужно с маленькой, но при этом должность может состоять из нескольких слов.
Подскажите, пожалуйста, решение для моей проблемы.

Вот часть кода по замене:
With Selection.Find
.Text = "Иванова Мария Ивановна"
.Replacement.Text = xlSht.Cells(i, 1)
' имя
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "ведущий технолог"
.Replacement.Text = xlSht.Cells(i, 2)
' должность
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
With Selection.Find
.Text = "СВПС"
.Replacement.Text = xlSht.Cells(i, 3)
' отдел
.Wrap = wdFindContinue
End With
Selection.Find.Execute Replace:=wdReplaceAll
atamansha вне форума  
Старый 11.01.2009, 07:12   #29
rzrwolf
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 22
Репутация: 10
По умолчанию

А что нужно изменить в коде, чтобы получить в Worde отформатированную точно так же как в Excel таблицу? И как скорректировать её размеры автоматически при вставке?
rzrwolf вне форума  
Закрытая тема

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры копирования Черничный Общие вопросы Delphi 4 14.08.2008 10:57
Конструктор копирования Djaconda Общие вопросы C/C++ 3 11.06.2008 18:54
Копирования файлив Shaitan63 Общие вопросы Delphi 10 24.05.2008 19:31
Запрет копирования pinhead Win Api 11 10.01.2007 08:01


06:16.


Powered by vBulletin® Version 3.8.11
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd.