从Outlook中引用和访问Excel

从Outlook中引用和访问Excel,excel,vba,Excel,Vba,我正在尝试从Outlook(Office 2010)更新Excel文件。如何引用和访问Excel 作为一个简单的测试,我试图计算打开的工作簿的数量。当我运行这个时,我得到0,即使有2个打开 Sub Test() Dim xlApp As Excel.Application Dim xlWBook As Excel.Workbook Set xlApp = New Excel.Application Debug.Print "xlApp.Workbooks.Cou

我正在尝试从Outlook(Office 2010)更新Excel文件。如何引用和访问Excel

作为一个简单的测试,我试图计算打开的工作簿的数量。当我运行这个时,我得到0,即使有2个打开

Sub Test()
    Dim xlApp As Excel.Application
    Dim xlWBook As Excel.Workbook

    Set xlApp = New Excel.Application
    Debug.Print "xlApp.Workbooks.Count = " & xlApp.Workbooks.Count

    On Error Resume Next
    Set xlWBook = xlApp.Workbooks("Data.xlsx")
    Err.Clear 'Clear error and open File Index

    If  xlWBook Is Nothing Then
        Set xlWBook = xlApp.Workbooks.Open("C:\Users\Chris\Desktop\Data.xlsx")
    End If
End Sub

这是我用来检测Excel的:

Dim xlApp As excel.Application
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err.Number = 429 Then 'Excel not running
    Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
设置xlApp后,您可以使用
xlApp.Workbooks.Count
对工作表进行计数

注意:如果要查找多个Excel实例,则此代码将打开第一个实例

如果您必须查找特定工作簿,请从中选择,
Set xlApp=GetObject(“Book2”)。应用程序将查找工作簿,即使它不在第一个实例中。如果工作簿来自文件或已保存,请将
book2
替换为full路径和文件名-副作用-如果文件尚未打开,也会打开该文件
更多使用信息:

这是我用来检测Excel的:

Dim xlApp As excel.Application
On Error Resume Next
Set xlApp = GetObject(, "Excel.Application")
If Err.Number = 429 Then 'Excel not running
    Set xlApp = CreateObject("Excel.Application")
End If
On Error GoTo 0
设置xlApp后,您可以使用
xlApp.Workbooks.Count
对工作表进行计数

注意:如果要查找多个Excel实例,则此代码将打开第一个实例

如果您必须查找特定工作簿,请从中选择,
Set xlApp=GetObject(“Book2”)。应用程序将查找工作簿,即使它不在第一个实例中。如果工作簿来自文件或已保存,请将
book2
替换为full路径和文件名-副作用-如果文件尚未打开,也会打开该文件
更多使用信息:

您正在创建一个新的Excel实例-它与一个或多个实例(包含打开的两个工作簿)分开,听起来操作起来很混乱。最好在代码拥有的(新)Excel实例中打开所需的工作簿。您正在创建一个新的Excel实例,它与一个或多个实例(包含打开的两个工作簿)分开,听起来操作起来很混乱。最好在代码拥有的(新)Excel实例中打开所需的工作簿。如果Excel openTrue的现有实例超过1个,则此操作将不起作用,但我使用此代码尝试不打开任何超出需要的实例,我明白了。获取Excel的第一个实例。因此,如果Data.xlsx在任何其他实例中打开,我将不会看到它。有办法解决这个问题吗?我需要为任何可能发生的事情负责…@Sean:我是不是错过了什么?从您发布的同一链接:
如果Microsoft Excel的多个实例正在运行,则GetObject将附加到首先启动的实例。如果关闭第一个实例,对GetObject的另一个调用将附加到启动的第二个实例,依此类推。
如果未保存,则必须使用“book”名称,如果保存,则必须使用完整路径,否则可能会导致问题。我使用该方法在3个不同的实例之间来回切换。如果Excel openTrue的现有实例超过1个,这将不起作用,但我使用此代码尝试不打开任何超出我需要的实例,我明白了。获取Excel的第一个实例。因此,如果Data.xlsx在任何其他实例中打开,我将不会看到它。有办法解决这个问题吗?我需要为任何可能发生的事情负责…@Sean:我是不是错过了什么?从您发布的同一链接:
如果Microsoft Excel的多个实例正在运行,则GetObject将附加到首先启动的实例。如果关闭第一个实例,对GetObject的另一个调用将附加到启动的第二个实例,依此类推。
如果未保存,则必须使用“book”名称,如果保存,则必须使用完整路径,否则可能会导致问题。我使用该方法在3个不同的实例之间来回切换