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

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

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

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

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

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

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

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

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

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

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

в коде, приведенном дмидми, у меня 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,180
По умолчанию

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

Цитата:
Сообщение от 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, 10:30   #28
atamansha
Новичок
Джуниор
 
Регистрация: 29.12.2008
Сообщений: 1
По умолчанию Смена регистра

Здравствуйте! Извините, не разобралась, где создавать новую тему, поэтому пишу сюда.
Есть табличка в екселе с 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, 06:12   #29
rzrwolf
Пользователь
 
Регистрация: 19.10.2008
Сообщений: 22
По умолчанию

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


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Параметры копирования Черничный Общие вопросы 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 07:01