Активация открытой книги Excel из Outlook - PullRequest
0 голосов
/ 11 октября 2019

В моем Outlook есть макрос, который, когда я получаю электронное письмо с определенной темой, автоматически открывает книгу Excel и вставляет часть темы электронной почты в определенную ячейку в одну из рабочих таблиц. Работает отлично. Теперь мне нужно сделать точно такой же процесс, но вставить эту информацию в уже открытую книгу, а не открывать закрытый файл.

Я пробовал разные решения из моих ограниченных знаний Excel VBA (ActiveWorkbook, worbooks (имя файла) .activate и т. д.), но ничего из этого не сработало, и я не нашел ничего похожего в Интернете, так как большинство макросов написаны как запускаемые из файла Excel, а не Outlook.

Это часть нашего текущего кода, который открывает файл и вставляет тему электронной почты (которая является значением "ticker") в определенную ячейку на листе "Lista Empresas". Мне нужен код, который делает то же самое, но в уже открытой книге (назовем ее «test1»).

         Dim exapp As Excel.Application
         Dim ExWbk As Workbook
         Dim ExWbk2 As Workbook
         Set exapp = New Excel.Application
         Set ExWbk2 = exapp.Workbooks.Open("\\XXX\ListaEmpresas_ajustado.xlsm", UpdateLinks:=0)
         exapp.Visible = True

         ExWbk2.Sheets("Lista Empresas").Range("P2").Value = ticker
         ExWbk2.Sheets("Lista Empresas").Range("P3").Calculate

Ответы [ 2 ]

0 голосов
/ 11 октября 2019

Здесь есть несколько сценариев. Во-первых, работает ли Excel? Если нет, то делай то, что ты уже делаешь. Если да - открыта ли правильная рабочая книга? Если да - верните его, в противном случае откройте его.

Dim ExWbk2 As Workbook
Dim wb As Workbook
Dim exapp As Excel.Application

On Error Resume Next
Set exapp = GetObject(, "Excel.Application")
If Err.Number <> 0 Then
    Set exapp = Nothing
End If
On Error GoTo 0

If exapp Is Nothing Then
    ' Excel is not running
    Set exapp = New Excel.Application
    Set ExWbk2 = exapp.Workbooks.Open("\\XXX\ListaEmpresas_ajustado.xlsm", UpdateLinks:=0)
    ExWbk2.Visible = True
Else
    ' Excel is running, but is the right book open?
    For Each wb In exapp.Workbooks
        Debug.Print wb.Name ' <-- This will help you find what to look for
        If wb.Name = "ListaEmpresas_ajustado" Then
            ' Yes, it is!
            Set ExWbk2 = wb
        End If
    Next
    If ExWbk2 Is Nothing Then
        ' No, it wasn't
        Set ExWbk2 = exapp.Workbooks.Open("\\XXX\ListaEmpresas_ajustado.xlsm", UpdateLinks:=0)            
    End If
End If

Хитрость для определения, работает ли Excel, - GetObject. Он не будет работать, если не сможет его найти.
Цикл for позволяет найти правильную книгу на основе имени. Отрегулируйте при необходимости.

0 голосов
/ 11 октября 2019

Следующий код получает объект, если вы знаете имя листа, активного в данный момент в экземпляре Excel. Я думаю, что это можно получить из названия приложения, используя первый бит кода.

Dim exapp As Excel.Application
Dim ExWbk As Workbook
Dim ExWbk2 As Workbook
Set exapp = GetObject("ListaEmpresas_ajustado.xlsm").Application
exapp.Visible = True

ExWbk2.Sheets("Lista Empresas").Range("P2").Value = ticker
ExWbk2.Sheets("Lista Empresas").Range("P3").Calculate
...