Переместите таблицу вправо, чтобы выровнять мои тексты в теле Outlook - PullRequest
1 голос
/ 11 ноября 2019

Я пытаюсь отправить электронное письмо из outlook с помощью Excel Macro, и мне нужно решение о том, как я могу перенести скопированные таблицы из Excel в тело Outlook, которое всегда будет выровнено по левой стороне, и я хочу егопереместиться немного вправо так, чтобы я идеально подходил / выравнивался с другим содержимым, которое у меня есть сверху.

Мой код

   Sub Table_CopyPaste()

        Dim outlook As Object 
        Dim newEmail As Object 
        Dim xInspect As Object 
        Dim pageEditor As Object

            Set outlook = CreateObject("Outlook.Application") Set newEmail = outlook.CreateItem(0)

StrBody1 = "<o:p>&nbsp;</o:p><p class=MsoNormal><span lang=EN-US style='color:#1F497D'><span style='font:11.0pt 'Calibri'>Hello,</Span></p><p class=MsoNormal><span style='font:11.0pt 'Calibri(Body)'>Attached you can find a file with all your Status for month 10_2019. </p></span><p class=MsoNormal><span style='font:11.0pt 'Calibri(Body)'>Below you can find an overview of your current status and your unit status.</span></span></p>" _ 
& "<p class=MsoListParagraph style='margin-left:53.4pt;text-indent:-18.0pt;mso-list:l0 level1 lfo2'><span style='font:11.0pt 'Calibri'><span lang=EN-US style='color:#1F497D'>1) &nbsp;&nbsp;&nbsp;&nbsp; We have extended the report with additional information, so you can develop a more complete view on your status:" _ 
& "<br>" _ 
& "<br>&nbsp;&nbsp;&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp;&nbsp HR" _ 
& "<br>&nbsp;&nbsp;&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp;&nbsp Accounts" _ 
& "<br>&nbsp;&nbsp;&nbsp;&nbsp;- &nbsp;&nbsp;&nbsp;&nbsp Finance" _


            With newEmail
                .To = "Test@mail.com"
                .CC = ""
                .BCC = ""
                .Subject = "Data"
                .HTMLBody = StrBody1
                .Display

                Set xInspect = newEmail.GetInspector
                Set pageEditor = xInspect.WordEditor

                Sheets("Statistics_Sheet").Range("A3:D6").Copy

                pageEditor.Application.Selection.Start = Len(.HTMLBody)
                pageEditor.Application.Selection.End = pageEditor.Application.Selection.Start

                pageEditor.Application.Selection.PasteAndFormat (wdFormatPlainText)
                .Display
                '.Send
                Set pageEditor = Nothing
                Set xInspect = Nothing End With

            Set newEmail = Nothing Set outlook = Nothing

            End Sub

ЭтоЯ впервые работаю над интеграцией Outlook с макросами, поэтому не знаю, как это решить. Код работает нормально, как только мы запустим этот код, мне нужно, чтобы таблица была выровнена по пункту «Финансы»

Ответы [ 2 ]

1 голос
/ 13 ноября 2019

После слишком большого количества поисков здесь и там я обнаружил, что его невозможно переместить, но обходной путь здесь заключается в добавлении некоторых дополнительных пустых ячеек в этот диапазон, чтобы при вставке копии в Outlook выровнять ее по тексту(Отрегулируйте ширину ячеек, чтобы изменить выравнивание)

Но я нахожу код, который работает как шарм,

Sub PublishTable()

Dim WB As ThisWorkbook, P As String, WS As Worksheet, Rng As Range, New_WB As Workbook, RNG2 As Range, FolderPath As String
Set WB = ThisWorkbook
Set WS = WB.Sheets("Statistics_Sheet")

FolderPath = Application.ActiveWorkbook.Path
Set Rng = Sheets("Statistics_Sheet").Range("C3:F6")
P = FolderPath & "\Calculation_of_exception_status.html"

Workbooks.Add
Set New_WB = ActiveWorkbook
ThisWorkbook.Activate
Rng.Copy

New_WB.Activate
ActiveCell.PasteSpecial xlPasteValues
ActiveCell.PasteSpecial xlPasteFormats
ActiveCell.PasteSpecial xlPasteColumnWidths
ActiveCell.PasteSpecial xlPasteFormats

New_WB.PublishObjects.Add(xlSourceRange, P, New_WB.Sheets(1).Name, New_WB.Sheets(1).UsedRange.Address, xlHtmlStatic).Publish (True)
ActiveWorkbook.Close SaveChanges:=False

Dim fso As New FileSystemObject
Set fso = New Scripting.FileSystemObject

Dim Final_File As Scripting.TextStream
Set Final_File = fso.OpenTextFile(P, ForReading)
StrTable2 = Final_File.ReadAll

End Sub

А когда вы используете Strtable2 в вашем теле outlook, используйте приведенный ниже кодОтрегулируйте «20 .3pt» в соответствии с вашими требованиями.

olMailItm.HTMLBody = "<table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 style='margin-left:20.3pt;border-collapse:collapse'>" & StrTable2 & "</Table>"
0 голосов
/ 11 ноября 2019

Если это фактический элемент HTML <table>, который он вставляет, вы можете добавить таблицу стилей в .HTMLBody

Вверху Dim переменную:

Dim sStyles As String
sStyles = "<style> table {margin-left:150px;} table table {margin-left:0px;} </style><br>"

А затем, где вы устанавливаете .HTMLBody, добавьте его следующим образом:

.HTMLBody = sStyles & StrBody1

Затем настройте число 150 в коде так, чтобы оно выровнялось так, как вам нужно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...