从Outlook激活打开的Excel工作簿

时间:2019-10-11 13:16:04

标签: excel vba outlook-vba

我的Outlook中有一个宏,每当我收到带有特定主题的电子邮件时,它就会自动打开Excel工作簿并将一部分电子邮件主题粘贴到工作表之一中的特定单元格中。它运作完美。现在,我需要执行完全相同的过程,只是将这些信息粘贴到已经打开的工作簿中,而不是打开关闭的文件。

我尝试使用有限的Excel VBA知识(ActiveWorkbook,worbooks(filename).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 :(得分:0)

如果您知道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

答案 1 :(得分:0)

这里有一些情况需要处理。首先,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循环可用于根据名称查找正确的工作簿。根据需要进行调整。

相关问题