Выравнивание картинки в Visulal Basic (Word Application)

Программирование на Visual Basic for Applications
SkyFantom
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 08.10.2009 (Чт) 16:58

Выравнивание картинки в Visulal Basic (Word Application)

Сообщение SkyFantom » 08.10.2009 (Чт) 17:18

Так вставляется картинка :

Код: Выделить всё
   Photo = "http://yandex.ru/lo.gif"
   Set objShapePic = objWord.Application.Selection.InlineShapes.AddPicture(Photo)
VB вижу первый раз, всё больше html или php, но вот появилась задачка вставить картинку в подпись Outlook'a.

P.S. Необходимо выравнять картинку по правому краю и сделать ей "положение за текстом".

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Выравнивание картинки в Visulal Basic (Word Application)

Сообщение viter.alex » 08.10.2009 (Чт) 17:37

Код: Выделить всё
  Dim objShapeBehind As Shape
   With objShapePic
    .Range.ParagraphFormat.Alignment = 2 'wdAlignParagraphRight
    Set objShapeBehind = .ConvertToShape
    objShapeBehind.WrapFormat.Type = 5 'wdWrapBehind
  End With
Лучше день потерять — потом за пять минут долететь!

SkyFantom
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 08.10.2009 (Чт) 16:58

Re: Выравнивание картинки в Visulal Basic (Word Application)

Сообщение SkyFantom » 08.10.2009 (Чт) 17:52

viter.alex писал(а):
Код: Выделить всё
  Dim objShapeBehind As Shape
   With objShapePic
    .Range.ParagraphFormat.Alignment = 2 'wdAlignParagraphRight
    Set objShapeBehind = .ConvertToShape
    objShapeBehind.WrapFormat.Type = 5 'wdWrapBehind
  End With

1. Ругается на Dim - Предполагается наличие окончания инструкции
2. Без Dim работает выравнивание, но я так понимаю что выравнивание применяется для <p> (параграфа), а не для img, вобщем выравнивание работает, но этот самый <p> (параграф) откуда-то взял себе width="280px" ?
3. Или как вариант, я могу использовать простой html и стили ?

SkyFantom
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 08.10.2009 (Чт) 16:58

Re: Выравнивание картинки в Visulal Basic (Word Application)

Сообщение SkyFantom » 08.10.2009 (Чт) 18:10

Полный код подписи :
Код: Выделить всё
'**************************************
'Создаем подпись

  'Сначала определяем тип OC. Если он содержит Server 2003, то не устанавливаем подпись.
  strComputer = "."
  Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")
  Set colOperatingSystems = objWMIService.ExecQuery ("Select * from Win32_OperatingSystem")

    For Each objOperatingSystem in colOperatingSystems 
      strOSType = objOperatingSystem.Caption
    Next
  intSearchString = instr (strOSType, "Server 2003")

wscript.echo intSearchString & " OS Type: " & strOstype

'Вот теперь создаем подпись
if intSearchString = 0 then
  Set objSysInfo = CreateObject("ADSystemInfo")

  strUser = objSysInfo.UserName
  Set objUser = GetObject("LDAP://" & strUser)

  strName = objUser.FullName
  strFirstName = objUser.givenName
  strLastname = objuser.sn
  strTitle = objUser.Title
  strDepartment = objUser.Department
  strCompany = objUser.Company
  strPhone = objUser.telephoneNumber
  strMobile = objUser.mobile
  strPublicPhone = objUser.otherTelephone
  strMail = objuser.mail

  Set objWord = CreateObject("Word.Application")

  Set objDoc = objWord.Documents.Add()
  Set objSelection = objWord.Selection

  Set objEmailOptions = objWord.EmailOptions
  Set objSignatureObject = objEmailOptions.EmailSignature

  Set objSignatureEntries = objSignatureObject.EmailSignatureEntries
 
      

  objSelection.Font.Size = 10
  objSelection.Font.Name = "Arial"
  objSelection.Font.Color = 0
  objSelection.ParagraphFormat.SpaceBeforeAuto = False   
  objSelection.ParagraphFormat.SpaceBefore = 1
  objSelection.ParagraphFormat.SpaceAfterAuto = False
  objSelection.ParagraphFormat.SpaceAfter = 1

  objSelection.ParagraphFormat.LineSpacingRule = wdLineSpaceSingle
  'objSelection.ParagraphFormat.LineSpacing = 1


  'objSelection.TypeText "Уважаем"
  'objSelection.TypeParagraph()
  'objSelection.TypeText " "
  'objSelection.TypeParagraph()
  objSelection.TypeText " "
  objSelection.TypeParagraph()

  objSelection.TypeText "С наилучшими пожеланиями,"
  objSelection.TypeParagraph()
  objSelection.TypeText " "
  objSelection.TypeParagraph()


  objSelection.TypeText strFirstName & " " & strLastName
  objSelection.TypeParagraph()

  objSelection.TypeText strTitle
  objSelection.TypeParagraph()



  if Instr (strTitle, "Руководитель отдела") = 0 then
   select Case strDepartment
     case "Отдел аналитических систем"
       objSelection.TypeText strDepartment
       objSelection.TypeParagraph()
     case "Отдел вёрстки"
       objSelection.TypeText strDepartment
       objSelection.TypeParagraph()
     case "Отдел дизайна"
       objSelection.TypeText strDepartment
       objSelection.TypeParagraph()
   end select
  end if

  if strPhone <> "" then
    objSelection.TypeText strPublicPhone & ", доб. " & strPhone
    objSelection.TypeParagraph()
   else
    objSelection.TypeText strPublicPhone
    objSelection.TypeParagraph()
  end if

     

  if strMobile <> "" then
   objSelection.TypeText "Моб. " & strMobile
   objSelection.TypeParagraph()
  end if

  objSelection.Hyperlinks.Add objSelection.range, "mailto:" & strMail, , ,LCase (strMail)
  objSelection.TypeParagraph()
 
  objSelection.Hyperlinks.Add objSelection.range, "http://www.omb.ru" , , ,"www.omb.ru"
 
 
  objSelection.TypeParagraph()
 

   
   Photo = "http://yandex.ru/lo.gif"
   Set objShapePic = objWord.Application.Selection.InlineShapes.AddPicture(Photo)
   Dim objShapeBehind As Shape
   With objShapePic
    .Range.ParagraphFormat.Alignment = 2 'wdAlignParagraphRight
    Set objShapeBehind = .ConvertToShape
    objShapeBehind.WrapFormat.Type = 5 'wdWrapBehind
  End With
         
  Set objSelection = objDoc.Range()

  objSignatureEntries.Add "Yandex Signature", objSelection
  objSignatureObject.NewMessageSignature = "Yandex Signature"
  objSignatureObject.ReplyMessageSignature = "Yandex Signature"

  objDoc.Saved = True
  objWord.Quit
  wscript.echo "Подпись установлена"
else
wscript.echo "Подпись не установлена!!!"
end if

viter.alex
Бывалый
Бывалый
Аватара пользователя
 
Сообщения: 221
Зарегистрирован: 27.07.2008 (Вс) 20:17
Откуда: Montreal

Re: Выравнивание картинки в Visulal Basic (Word Application)

Сообщение viter.alex » 08.10.2009 (Чт) 18:17

Что значит ругается? Наверное не на Dim, а на Shape? Поставь вместо Shape Object
А, понятно, ты на скрипте пишешь. ОК
Конечно выравнивается сначала абзац, потому что картинка находится в тексте (InlineShape). В предложенном мною коде картинка сначала выравнивается по правому краю (в тексте), затем пребразуется в объект Shape, который может «плавать» в документе, и уже для этого объекта задается положение «За текстом».
Можно сделать иначе. Сразу преобразовать в Shape, а затем выставить картинку так, чтобы ее правый край совпадал с правой границей текста. Вот так, как-то:
Код: Выделить всё
  'Считаем положение правого края страницы (расстояние от левого края)
  With objShapePic.Range.Sections(1).PageSetup
    ileft = .PageWidth - .LeftMargin - .RightMargin
  End With
 
  Set objShapeBehind = objShapePic.ConvertToShape
    With objShapeBehind
      'Задаем положение картинки
      .Left = ileft - .Width
      'Привязываем положение картинки к странице
      .RelativeHorizontalPosition = 1 'wdRelativeHorizontalPositionPage
      .RelativeVerticalPosition = 1 'wdRelativeVerticalPositionPage
      'Обтекание текстом
      .WrapFormat.Type = 5 'wdWrapBehind
    End With
Лучше день потерять — потом за пять минут долететь!

SkyFantom
Начинающий
Начинающий
 
Сообщения: 4
Зарегистрирован: 08.10.2009 (Чт) 16:58

Re: Выравнивание картинки в Visulal Basic (Word Application)

Сообщение SkyFantom » 09.10.2009 (Пт) 9:19

viter.alex писал(а):Что значит ругается? Наверное не на Dim, а на Shape? Поставь вместо Shape Object
А, понятно, ты на скрипте пишешь. ОК
Конечно выравнивается сначала абзац, потому что картинка находится в тексте (InlineShape). В предложенном мною коде картинка сначала выравнивается по правому краю (в тексте), затем пребразуется в объект Shape, который может «плавать» в документе, и уже для этого объекта задается положение «За текстом».
Можно сделать иначе. Сразу преобразовать в Shape, а затем выставить картинку так, чтобы ее правый край совпадал с правой границей текста. Вот так, как-то:
Код: Выделить всё
  'Считаем положение правого края страницы (расстояние от левого края)
  With objShapePic.Range.Sections(1).PageSetup
    ileft = .PageWidth - .LeftMargin - .RightMargin
  End With
 
  Set objShapeBehind = objShapePic.ConvertToShape
    With objShapeBehind
      'Задаем положение картинки
      .Left = ileft - .Width
      'Привязываем положение картинки к странице
      .RelativeHorizontalPosition = 1 'wdRelativeHorizontalPositionPage
      .RelativeVerticalPosition = 1 'wdRelativeVerticalPositionPage
      'Обтекание текстом
      .WrapFormat.Type = 5 'wdWrapBehind
    End With

Спасибо.
1. Работает в Outlook 2003, правда всё равно надо разбираться с шириной параграфа
2. Не работает в Outlook2007, причём не работает ни выравнивание по правому краю, ни положение за текстом.
3. Мне просто интересно, нельзя ли html-код писать ? Пробовал TypeText, естественно выводился текст <html><head> и.т.д.


Вернуться в VBA

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22

    TopList