Vba 从Outlook 16调用Excel宏

Vba 从Outlook 16调用Excel宏,vba,excel,outlook,Vba,Excel,Outlook,我在调用personal.xlsm中包含的Excel宏时遇到了一些麻烦。请帮助我 我正在运行Outlook 2016。试图在打开Outlook时从personal.xlsm调用宏。关键问题(我认为基于其他解决方案)是没有包含正确的Excel数据对象库,但我已经包含了看起来相关的数据对象库(没有成功) 程序只是在没有调用宏的情况下运行,我在Excel宏的开头放置了一个MsgBox提示符,以检查它是否每次都开始运行并失败 摘自下面的代码;我已删除与此问题无关的代码 在outlook中:此会话 Pr

我在调用personal.xlsm中包含的Excel宏时遇到了一些麻烦。请帮助我

我正在运行Outlook 2016。试图在打开Outlook时从personal.xlsm调用宏。关键问题(我认为基于其他解决方案)是没有包含正确的Excel数据对象库,但我已经包含了看起来相关的数据对象库(没有成功)

程序只是在没有调用宏的情况下运行,我在Excel宏的开头放置了一个MsgBox提示符,以检查它是否每次都开始运行并失败

摘自下面的代码;我已删除与此问题无关的代码

在outlook中:此会话

Private Sub Application_Startup()


Dim macroFile As String, networkFilePath As String, sourceFile as String
Dim DestFile As String: DestFile = "FolderTree.csv"
Dim SourceFolder As String: SourceFolder = "[NetworkLocation]"
Dim foldersRequired As String

Dim objShell As Object
Dim objFile As Object
Dim fso As FileSystemObject:  Set fso = CreateObject("Scripting.FileSystemObject")

Dim xlApp As Object: Set xlApp = CreateObject("Excel.Application")   'open the excel csv source file
Dim xlWkb As Object, xlSht As Object

On Error Resume Next

''get the core xlsb macros file - saves updating the individual user outlook
macroFile = userProfilePath & "\Personal.xlsb"
'This works fine & opens the file with no issues.

 Set xlWkb = xlApp.Workbooks.Open(macroFile)
 Set xlSht = xlWkb.Worksheets(1) 
xlApp.Application.Visible = True

'' extract the users profile path
Set objShell = CreateObject("WScript.Shell")
    userProfilePath = objShell.ExpandEnvironmentStrings("%UserProfile%") & "[DataFolder]"

sourceFile = userProfilePath & "\" & DestFile


xlApp.Workbooks("Personal.xlsb").Activate
xlApp.Workbooks.Open FileName:=(sourceFile)
'' This opens fine

If Not xlxApp Is Nothing Then
     '' None of the below work
     xlWkb.Application.Run "Module1.Clean_CSV(sourceFile, userProfilePath)"
     '' This doesn't work
     xlWkb.Application.Run "Personal.xlsb!Module1.Clean_CSV(sourceFile, userProfilePath)"
     '' This doesn't work
     xlWkb.Application.Run "Personal.xlsb!Clean_CSV(sourceFile, userProfilePath)"
     '' This doesn't work
End If
     xlApp.Close
     xlApp.Quit

     '' I set all Variables & Objects to Nothing & then
End Sub

您似乎从未设置过宏文件的值。您是否已使用调试器逐步完成此操作?此外,如果您使用的是Excel 16对象库,则可以将xlApp、xlWkb等设置为Excel对象,而不是“对象”。您是否尝试过在错误恢复下一步时注释
,以查看它是否有错误(我希望看到一个“未找到文件”的文件试图打开宏文件)。您正在向
应用程序传递字符串。运行
。在该字符串中,您试图为Excel宏设置一些参数,但传递的是Outlook应用程序中存在的变量名称,而不是Excel应用程序中的变量名称。我怀疑您需要使用
“Personal.xlsb!Module1.Clean_CSV”(“&sourceFile&“,”&userProfilePath&“)”
)的形式,以便将值作为字符串的一部分传递。正如@ainwood指出的,在尝试打开工作簿之前,您不会设置
宏文件。(但可能只要打开Excel,
Personal.xlsb
就会自动打开。)谢谢您的评论。注意宏文件在定义之前被打开的注释-在我的整个代码中,这是按照正确的顺序完成的,但是上面的输入错误。我修正了这个作为参考。@YowE3k。我不确定我是否明白你的意思。我[试图]将变量的值传递到Excel宏中,而不是变量本身。如果我像你所说的那样使用引号,这不会传递变量名而不是变量值吗@尼顿;谢谢但这并没有解决任何问题。当我捕获错误
RunExcelMacro\u Err:MsgBox Err.Description
时,我被抛出错误“Object required”,似乎您从未设置
macrofile
的值。您是否已使用调试器逐步完成此操作?此外,如果您使用的是Excel 16对象库,则可以将xlApp、xlWkb等设置为Excel对象,而不是“对象”。您是否尝试过在错误恢复下一步时注释
,以查看它是否有错误(我希望看到一个“未找到文件”的文件试图打开宏文件)。您正在向
应用程序传递字符串。运行
。在该字符串中,您试图为Excel宏设置一些参数,但传递的是Outlook应用程序中存在的变量名称,而不是Excel应用程序中的变量名称。我怀疑您需要使用
“Personal.xlsb!Module1.Clean_CSV”(“&sourceFile&“,”&userProfilePath&“)”
)的形式,以便将值作为字符串的一部分传递。正如@ainwood指出的,在尝试打开工作簿之前,您不会设置
宏文件。(但可能只要打开Excel,
Personal.xlsb
就会自动打开。)谢谢您的评论。注意宏文件在定义之前被打开的注释-在我的整个代码中,这是按照正确的顺序完成的,但是上面的输入错误。我修正了这个作为参考。@YowE3k。我不确定我是否明白你的意思。我[试图]将变量的值传递到Excel宏中,而不是变量本身。如果我像你所说的那样使用引号,这不会传递变量名而不是变量值吗@尼顿;谢谢但这并没有解决任何问题。当我捕获到错误
RunExcelMacro\u Err:MsgBox Err.Description
时,我会抛出错误“Object required”