Добавление динамического диапазона в мой макрос VBA в Outlook

#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 свойство возвращает формулу в виде строки в том же формате, который будет отображаться в строке формул (включая знак равенства ( = )).