Страница: 1 | 2 |
Вопрос: Word.Application
Добавлено: 30.05.08 18:48
Автор вопроса: nat-z
Столкнулась с проблемой - мне надо вызвать из VB ворд. Ворд вызывается, файл загружается, но проблемы с кодировкой и шрифтами. У меня открываемые файлы - текстовые *.txt в кодировке MS-DOS. Брала Encoding:=msoEncodingOEMCyrillicII и все проч. значения - не помогает! И вообще после вставки "кодированный текст" ворд не выходит в меню выбора кодировки (а запущенный "вручную" -норм). Пробовала менять ConfirmConversions:=True/False - при false вообще файл не открывает (код возврата не смотрела).
А мне надо ВСЕГДА открывать в досовской кодировке и всегда шрифт Курьер, только размер шрифта менять!
Помогите, кто знает! Только на вставку VB в ворде не отсылайте - там я уже была!
Ответы
Всего ответов: 24
Номер ответа: 1
Автор ответа:
Smith
ICQ: ненавижу
Вопросов: 28
Ответов: 317
Web-сайт:
Профиль | | #1
Добавлено: 30.05.08 19:31
Нат, а ты не пробовала банально записать макрос и посмотреть, как оно в макросе выглядит.
Не знаю какой у тебя но вот мой Word 2003 придумал такую конструкцию
False, ReadOnly:=False, AddToRecentFiles:=False, PasswordDocument:="", _
PasswordTemplate:="", Revert:=False, WritePasswordDocument:="", _
WritePasswordTemplate:="", Format:=wdOpenFormatAuto, XMLTransform:="", _
Encoding:=866
Номер ответа: 2
Автор ответа:
Smith
ICQ: ненавижу
Вопросов: 28
Ответов: 317
Web-сайт:
Профиль | | #2
Добавлено: 30.05.08 19:34
Примечателен параметр последнего Named argument-а, Encoding:=866, ты и это пробовала?
Номер ответа: 3
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #3
Добавлено: 31.05.08 08:16
Не поняла - что значит "записать"? (я с макросами вообще-то не дружу).
Я смотрела по Properties своего досовского документа и старалась оттуда выбрать параметры!
Вот эти параметры Documents.Open - как они получаются? В Properties этого нет, что значит:
мой Word 2003 придумал??
И где бы глянуть еще шрифт и размер шрифта?
Номер ответа: 4
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #4
Добавлено: 31.05.08 09:56
И сейчас только попробовала, у меня (правда Office-2007) выдает на этом Open error 4198, ошибка команды!
Что делать????
Номер ответа: 5
Автор ответа:
Smith
ICQ: ненавижу
Вопросов: 28
Ответов: 317
Web-сайт:
Профиль | | #5
Добавлено: 31.05.08 13:54
А стоит подружиться. Незнаю как в 2007, а в 2003 есть такой пункт меню "Сервис" - "Макрос" - "Начать запись" называется.
1. В новом документе начинаешь запись.
2. Открываешь свой дос текст, указывая ворду кодировку и т.п.
3. Потом, "Правка" - "Выделить всё", и устанавливаешь имя и размер шрифта.
4. Нажимаешь квадратик "Остановить запись" и ищешь макрос записанный "придуманный" Вордом в результате твоих действий.
Номер ответа: 6
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #6
Добавлено: 31.05.08 19:13
Ничего не поняла!!! У меня есть “Макрос” “Создать”. Но там Sub Макрос() End Sub и все. И никаких “Начать запись “ нигде!!!! И никаких подсказок и всплывающих названий полей!!
Кодировку файла я и так вижу в Properties в TextEncoding для этого документа.
Но как бы с файлом ни возилась, - выделение, замена шрифта и проч - ничего ни в какой макрос не попадает!!!
В 2007 ворде там же где макросы есть “Организатор”. Но он по командам ворда и как я поняла – формирует нов шаблон.
Мне все это не для изучения нужно!!!
И мне нужно не именно для моего компьютера, а чтобы во всех вордах работало!!!!!!
Просто открытие файла, который заведомо в ДОСовской кодировке, замена размера шрифта и все!!! И кодировку я уже знаю, Но почему-то objWord.ActiveDocument.TextEncoding=… якобы не поддерживается!!!
Обычный Sub(<имя и путь файла>,<портрет/пейзаж>,<шрифт>,<size> и все!!!
Вот эта конструкция при любом Encoding не переводит из ДОСа!!! А при ConfirmConversions:=false вообще не открывает файл без всяких визгов!!!!!
Set objWord = CreateObject("Word.Application"
objWord.Documents.Open FileName:=NFile, ReadOnly:=False, Encoding:=866, ConfirmConversions:=true
Номер ответа: 7
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #7
Добавлено: 31.05.08 19:53
Это вставка из буфера обмена.
Таким образом можно в ВБ загрузить файл, скопировать его в буфер и вставить в ворд.
Буфер обмена, должен сработать универсально для любого ворда.
Номер ответа: 8
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #8
Добавлено: 01.06.08 01:57
No....
Error 91. Я даже картинку с сообщением и текстом модуля с экрана сохранила!!!!
Номер ответа: 9
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #9
Добавлено: 01.06.08 02:00
Но написала все в точности, могу и картинку с экрана прислать!!!
Номер ответа: 10
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #10
Добавлено: 01.06.08 05:23
Это обязательно открывать именно в ворде?
В самой программе можно выставить нужный шрифт в текстбоксе и грузить туда текст из файла.
Перекодировать из 866 тоже не проблема.
Номер ответа: 11
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #11
Добавлено: 01.06.08 13:47
objWord.Selection.Paste
Конечно, вариант поставить 2003 (тем более что 2007 во многих вопросах почему-то тупит и внешне неприятный),
Но хотелось бы решение найти!!!
Номер ответа: 12
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #12
Добавлено: 01.06.08 13:56
ворд я использую как вьювер и для печати. Именно его - потому что надо переформатировать текст часто (файлы часто очень широкие).
Всю ночь прорыдала, чувствую, буду искать и ставить Office2003.
Кто-то может мне написать начисто Documents.Open с параметрами, как это будет выглядеть в 2003, чтобы файл txt открывался в 866 кодировке, без запроса преобразования, с заданным разворотом бумаги (в 2007 почему-то
И чтобы можно было указывать шрифт и размер шрифта?
А я в понедельник буду искать 2003 и ставить!
Номер ответа: 13
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #13
Добавлено: 02.06.08 01:14
Поствыила 2003 -
Но все равно проблемы остались! То ли я уже не порнимаю что-то, то ли в умных книжках неправильно пишут!!:
1)
2) Если в Open указываю ConfirmConversions:=True, выводится диалог не преобразование файла (а мне бы не надо!!!), если даю false – файл *.txt не открывается, но у него ставится отметка о занятости и при след запуске – уже только на чтение. А если ставлю дополнительно в Open Format:=wdOpenFormatEncodedText – вообще VB выдает ошибку!!
3) Пробую:
.Bold = True ' - запрашиваемый номер семейства не существует...
.Name = "Arial"
.Size = 24
End With
Кто может высказаться по этим трем вопросам? (третий для меня самый важный!!)
Номер ответа: 14
Автор ответа:
nat-z
Вопросов: 13
Ответов: 85
Профиль | | #14
Добавлено: 02.06.08 11:05
Спасибо!! Диковинный конечно способ через выделение. Но, действительно, почему-то PageSAetup.font не работает. И видела word.font (это общие установки ворда что ли?) но у меня тоже не спрцювало. Может, неправильно написала?
Сейчас у меня вот такая угловатая, но работающая вещь.
Dim n1, n2 As Long
Dim objWord As Object
If orient = 1 Then ' портрет.
n1 = 29.7
n2 = 21
Else ' пейзаж.
n2 = 29.7
n1 = 21
End If
Set objWord = CreateObject("Word.Application"
objWord.Documents.Open FileName:=NFile, ReadOnly:=False, Encoding:=866, ConfirmConversions:=True
objWord.ActiveDocument.PageSetup.PageWidth = objWord.CentimetersToPoints(n2) ' - работает.
objWord.ActiveDocument.PageSetup.PageHeight = objWord.CentimetersToPoints(n1) ' - работает.
objWord.Selection.WholeStory
objWord.Selection.Font.Name = "Courier New"
objWord.Selection.Font.Size = nsize
Set objWord = Nothing
End Sub
Еще бы от диалога по перекодировке текста избавиться, чтобы сразу молча брала как досовский текст!
Номер ответа: 15
Автор ответа:
Smith
ICQ: adamis@list.ru
Вопросов: 153
Ответов: 3632
Профиль | | #15
Добавлено: 02.06.08 13:40
Nat, какая разница реадонли или нет, смущает заголовок?
Как превью перед печатью он и так справляется отлично. Проверено:
Dim objWord As Object
Set objWord = CreateObject("Word.Application"
objWord.Documents.Open FileName:=NFile, ReadOnly:=True, Encoding:=866
With objWord.ActiveDocument.PageSetup
.LineNumbering.Active = False
.Orientation = vbNull
.TopMargin = objWord.CentimetersToPoints(3)
.BottomMargin = objWord.CentimetersToPoints(1.5)
.LeftMargin = objWord.CentimetersToPoints(2)
.RightMargin = objWord.CentimetersToPoints(2)
.Gutter = objWord.CentimetersToPoints(0)
.HeaderDistance = objWord.CentimetersToPoints(1.25)
.FooterDistance = objWord.CentimetersToPoints(1.25)
.PageWidth = objWord.CentimetersToPoints(29.7)
.PageHeight = objWord.CentimetersToPoints(21)
.FirstPageTray = 0
.OtherPagesTray = 0
.SectionStart = 2
.OddAndEvenPagesHeaderFooter = False
.DifferentFirstPageHeaderFooter = False
.VerticalAlignment = 0
.SuppressEndnotes = False
.MirrorMargins = False
.TwoPagesOnOne = False
.BookFoldPrinting = False
.BookFoldRevPrinting = False
.BookFoldPrintingSheets = 1
.GutterPos = 0
End With
objWord.Selection.WholeStory
objWord.Selection.Font.Name = "Courier New"
objWord.Selection.Font.Size = 14
objWord.Selection.MoveUp Unit:=5, Count:=1
objWord.Visible = True
Set objWord = Nothing
Это варварский код естественно, хлама лишнего немеренно.
Зато будет тебе над чем поработать.