Visual Basic, .NET, ASP, VBScript
 

   
   
     

Форум - VBA

Страница: 1 |

 

  Вопрос: *.doc --> *.pdf плюс куча тонкостей. Добавлено: 26.04.09 15:57  

Автор вопроса:  DrugON__
Доброго времени суток!
С VBA+Word не сталкивался никогда. Вообще какое-то отвращение к этому текстовому редактору присутствует, не знаю по какой причине, но о программировании для него я не думал даже в самых страшных снах. Теперь вот приходится. Вкратце обрисую проблему.
Есть вордовский файл с именем "FM_ddmmyyyy.doc". Необходимо вот что:
 1) пересохранить его под новым именем, где меняется только дата, а сама дата берется из документа. Но если в Excel можно объявить переменной значение ячейки с датой, то как это сделать здесь?
 2) переконвертировать полученный файл в PDF-формат
 3) разослать в таком виде по списку рассылки Outlook'а.

С пунктом 1 никаких идей вообще.
Там есть еще одна сложность, в документе Word есть Linked Worksheet Object (у меня английская версия, не могу сказать как точно в русской зовется, возможно, "Связанный объект"). Грубо говоря, это ссылка-таблица на область таблицы Excel, как она туда вставляется и можно ли ее редактировать (сами ссылки или же изменить ссылки, чтобы ссылались на другую книгу Excel)? Опять же, из-за незнания Ворда, трудно понять как это сделано.
Пункт 2 - установлен виртуальный принтер, конвертирующий в ПДФ-файл. Но как прописать печать и присвоение нового имени файлу?
Пункт 3. Тут вроде нет проблем, справлюсь, я думаю, но, опять же, пробовал на Excel - получалось. Что нужно, чтобы и в Ворде получилось?

Заранее всем благодарен за советы и помощь!

Ответить

  Ответы Всего ответов: 3  

Номер ответа: 1
Автор ответа:
 mc-black



ICQ: 308-534-060 

Вопросов: 20
Ответов: 1860
 Web-сайт: mc-black.narod.ru/dzp.htm
 Профиль | | #1
Добавлено: 28.04.09 12:06
1. Поиск фрагмента текста, относительно которого положение даты известно. Сдвиг курсора на несколько символов, выделение нескольких знаков даты.
2. Установить виртуальный принтер по умолчанию и просто печатать как на бумагу. Как заставить сохранять под определенным именем - не знаю. Имя файла для сохранения, по-моему, дает выбирать уже сам виртуальный принтер и тут, по-моему, с VBA уже нет ничего общего, к сожалению. Зависит от производителя виртуального принтера.
3. Проблем сам пишешь, что никаких ;)

Ответить

Номер ответа: 2
Автор ответа:
 DrugON__



Вопросов: 5
Ответов: 21
 Профиль | | #2 Добавлено: 04.05.09 19:35
1. Вообще никогда с Вордом не работал, за исключением пояснительной записки к диплому, но это было давно и неправда. Каким образом выделить определенный диапазон знаков при помощи VBA? VBA профессионально не занимаюсь, это больше хобби и попытки упростить рутину по работе. Алгоритм-то и так понятен, а вот как это воплотить в коде - I have no idea :(
2. Так и сделал. Поставил его по умолчанию, задал определенную директорию в настройках для сохранения pdf-файлов. С присвоением имени тоже не стал заморачиваться - написал просто копирование полученного файла с новым именем в другую (нужную мне) папку. Но тут сложность вот в чем. В Excel всё получилось и нормально работает, но требуется сделать всё вообще "не прикасаясь" к Excel, в этом-то и трабл. В VBA Word'а почему-то не работает
  1. FileSystemObject.CopyFile

Ума не приложу почему. Может какую-то хитрую библиотеку подключить надо? Всё перепробовал, упорно не хочет Ворд воспринимать FileSystemObject и всё тут.
3. Думал, что никаких. Но если раньше я из Excel'я отправлял сам файл вложением:
  1. ActiveWorkbook.SendMail Recipients:="Список рассылки"
,
то и сейчас думал, что проблем не будет. Но! Теперь мне нужно отправить письмо с вложением совсем постороннего файла (pdf). Перекурил кучу поисков, потратил пару дней (опять же из-за почти нулевого уровня в VBA), нарыл похожий скрипт на VBS и немного его переделал под себя. Может кому-то пригодится:

  1. Sub Otpravka()
  2.  
  3. Dim MSG As Object
  4. Dim Config As Object
  5. Dim CFields As Object
  6. Dim strBody As String
  7. Const ForReading = 1, ForWriting = 2, ForAppending = 8
  8. '
  9. 'Считываем текст сообщения из текстового файла:
  10.  
  11. Set fso = CreateObject("Scripting.FileSystemObject")
  12. 'Open the file for reading
  13. Set f = fso.OpenTextFile("c:\Apps\MessText.txt", ForReading)
  14. 'The ReadAll method reads the entire file into the variable BodyText
  15. MessText = f.ReadAll
  16. 'Close the file
  17. f.Close
  18. Set f = Nothing
  19. Set fso = Nothing
  20. '____________________________________________________________________________________
  21.  
  22.  
  23.  
  24. 'Создаем мыло:
  25. Set MSG = CreateObject("CDO.Message")
  26. 'Настройки соединения:
  27. Set Config = CreateObject("CDO.Configuration")
  28. Set CFields = Config.Fields
  29. Set MSG.Configuration = Config
  30. CFields("http://schemas.microsoft.com/cdo/configuration/sendusing") = 2
  31. CFields("http://schemas.microsoft.com/cdo/configuration/smtpserver") = "SLMCPF-S-01001" 'Exchange-сервак
  32. CFields("http://schemas.microsoft.com/cdo/configuration/smtpauthenticate") = 2 'для SMTP, по-моему, тут 1 надо ставить
  33. CFields("http://schemas.microsoft.com/cdo/configuration/sendusername") = "DrugON@shell.com" 'Login
  34. CFields("http://schemas.microsoft.com/cdo/configuration/sendpassword") = "" 'пароль (не ввел, потому как логинюсь автоматом при входе в систему)
  35. CFields("urn:schemas:mailheader:content-language") = "windows-1251" ' Кириллицу забыл добавить
  36. CFields("http://schemas.microsoft.com/cdo/configuration/smtpserverport") = 25 'порт SMTP, по умолчанию 25, так что можно строку и не писать - у меня и без нее работает.
  37. CFields.Update
  38. MSG.To = "billgates@microsoft.com" 'получатель, кстати список можно считать из текстового файла так же, как и тело сообщения (см.выше)
  39. MSG.From = "DrugON@shell.com" 'отправитель
  40. MSG.subject = "preved, billgates" ' тема мыла
  41. MSG.TextBody = MessText ' В теле письма - текст, считанный из текстового файла, можно и здесь текст ввести.
  42. MSG.AddAttachment("C:\Apps\Temp\Test_attach.txt") 'указываем вложение
  43. MSG.Send 'отправка
  44. 'обнулить переменные:
  45. Set CFields = Nothing
  46. Set Config = Nothing
  47. Set MSG = Nothing
  48.  
  49. End Sub


Знаю, что можно сделать отправку через MAPI, но пока не разобрался, да и мне на моем уровне больше важен результат, чем способ его достижения ;).

В общем всё это чудесно, если бы не пришлось всё переделывать под ненавистный Word.
Если он не понимает FileSystemObject (хотя в хелпе описание, идентичное Excel'евскому и я думаю, что сам что-то не учел), то думаю, что и с отправкой по почте тоже вылезет какой-нибудь геморрой.
Если кто-то может помочь советом каким образом это все переконвертить так, чтобы работало из Ворда, буду очень благодарен.
Кстати, можно ли из Excel или Word запускать VBS-скрипты?

Ответить

Номер ответа: 3
Автор ответа:
 машинист



Вопросов: 6
Ответов: 26
 Профиль | | #3 Добавлено: 19.05.09 03:10
Привет.
А почему, собственно, Word? Нельзя ли сделать всю рутину в той среде, в которой Вы хорошо плаваете, а затем уже готовый результат (или промежуточный) вставлять в Word?
...пока не разобрался, да и мне на моем уровне больше важен результат, чем способ его достижения

Ответить

Страница: 1 |

Поиск по форуму



© Copyright 2002-2011 VBNet.RU | Пишите нам