#excel #vba #automation #outlook
Вопрос:
Я написал макрос, который берет определенный диапазон моего рабочего листа и вставляет его в электронное письмо. Диапазон в настоящее время жестко закодирован в мой макрос. Мне нужно, чтобы он менял базы, если определенные строки пусты или нет. Я нашел способ заставить Excel выводить нужный мне диапазон в ячейке с вложенным оператором if, но мне нужна помощь, чтобы ввести это в мой макрос.
Вот мой код, который пишет электронное письмо
Sub ChemGlassCopyRangeToOutlook_single()
'Declare Outlook Vairables
Dim oLookApp As Outlook.Application
Dim oLookItm As Outlook.MailItem
Dim oLookIns As Outlook.Inspector
'Declare Word Vaiables
Dim oWrdDoc As Word.Document
Dim oWrdRng As Word.Range
'Declare Excel Variables
Dim ExcRng As Range
On Error Resume Next
'Get the Active instance of Outlook
Set oLookApp = GetObject(, "Outlook.Application")
'If error create a new instance of outlook
If Err.Number = 429 Then
'Clear Error
Err.Clear
'Create new instance of Outlook
Set oLookApp = New Outlook.Application
End If
'Create a new email 'Possible Problem here
Set oLookItm = oLookApp.CreateItem(olMailItem)
'Create a reference to the ex range you want to export
Set ExcRng = Sheet1.Range("B15:G20")
With oLookItm
'Define basic info
'Range("m3").Copymight not need
.From = "ABC@XYZ.com"
.To = "123@XYZ.com"
.CC = ""
.Subject = Range("m3")
.Body = "Please review the attached invoices and confirm that the goods or services have been received and payment should be made."
'Display email
.Display
'Left off at time stamp 12:39
'Get the active inspector
Set oLookIns = .GetInspector
'Get word editor
Set oWrdDoc = oLookIns.WordEditor
'Specify rang in document
Set oWrdRng = oWrdDoc.Application.ActiveDocument.Content
oWrdRng.Collapse Direction:=wdCollapseEnd
'Add new paragraphand then insert break
Set oWrdRng = oWdEditor.Paragraph.Add
oWrdRng.InsertBreak
'Copy the Range
ExcRng.Copy
'Paste it
oWrdRng.PasteSpecial DataType:=wdPasteMetafilePicture
End With
EndSub
Вот что я написал в Excel, чтобы получить необходимый диапазон
'=IF(B20<>"","B15:G20",(IF(B19<>"","B15:g19",(IF(B18<>"","B15:G18",(IF(B17<>"","B15:G17",FALSE)))))))
Есть ли способ заставить VBA извлекать выходные данные ячейки с помощью этой формулы?
Кроме того, это очень похоже на руба Голберга, если у кого-то есть идея получше, я открыт, но в то же время, за исключением того, что это не динамично, это работает 😀
ТИА
Комментарии:
1. Вы можете написать функцию, которая возвращает диапазон Excel (или адрес диапазона). Превратите этот вложенный
if
оператор вSelect Case
оператор в функции.
Ответ №1:
Вы можете использовать диапазон.Свойство Value, которое возвращает значение, представляющее значение указанного диапазона. диапазон.Свойство Formula возвращает значение, представляющее неявно пересекающуюся формулу объекта в нотации в стиле A1. Если ячейка содержит формулу, Formula
свойство возвращает формулу в виде строки в том же формате, который будет отображаться в строке формул (включая знак равенства ( = )).