VBA 宏在本地有效,但在 SSMS SQL 代理作业中无效

问题描述 投票:0回答:1

我想运行一个 VBA 宏来创建一个文件夹,然后复制该文件夹中的 Excel 文件,然后修改它们。

我在本地完美运行这个宏(我按宏编辑器中的“播放”按钮)。我尝试直接在我的电脑上通过 PowerShell 脚本运行它,它也运行良好。我尝试创建一个包 SSIS,它使用之前的 PowerShell 脚本调用 ps1 文件,当我在本地运行它时,它工作得很好。

但是,当我尝试在 SSMS 中使用 SQL 代理作业执行此操作时,作业步骤只是加载、加载、加载,但永远不会结束(并且不起作用)。

在SSMS中我们有2种情况:

  1. 我运行 SSIS 包,该包使用 PowerShell 脚本调用
    ps1
    文件:作业一遍又一遍地运行,永远不会停止,也没有任何反应
  2. 我直接在作业中运行 PowerShell:作业一遍又一遍地运行,永远不会停止,但宏已启动,因为它创建了一个文件夹。

不幸的是,没有错误消息,什么也没有,当我尝试在本地运行某些东西时,一切都很好,一切都工作得很好。

SSMS 实际上托管在另一台服务器中,但我尝试直接在 SSMS 服务器上本地运行宏,你猜怎么着?有用。所以这甚至不是Excel版本或奇怪的问题,代码可以工作。那么这怎么可能呢?

就权利而言,通常我们很好,服务器尽可能拥有所有权利,我再次在我的电脑和服务器上测试宏,它运行得很好。

这是VBA代码:

Public Fichier      As String, Chemin As String
Public Database     As Workbook

Sub macro9()
    Application.ScreenUpdating = FALSE
    Application.DisplayAlerts = FALSE
    Chemin = "somepath"
    
    Fichier = Dir(Chemin & "*MMM*.xlsx")
    'Start of creation of the folder
    If Fichier = "" Then
        End
    End If
    On Error Resume Next
    Chemin_final = Chemin & "Fichiers mis en forme\"
    MkDir Chemin_final
    
    On Error GoTo 0
    'End of creation of the folder
    
    Fichier = Dir(Chemin & "*MMM*.xlsx")
    Do While Fichier <> ""
        
        Set Database = Workbooks.Open(Filename:=Chemin & Fichier, CorruptLoad:=XlCorruptLoad.xlRepairFile)
        Database.SaveAs Filename:=Chemin_final & Database.Name, FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
        Database.Close
        Fichier = Dir
        
    Loop
    
End Sub

PS:我尝试在 VBScript 中重新编码这个宏,以便直接在 SSIS 包上运行它,但它不起作用,但我认为这是因为我在 SSMS 服务器上没有好的库。我也尝试用 C# 代码运行它,结果是一样的。

sql-server vba powershell ssis ssms
1个回答
0
投票

当代码在 SQL Server Agent 下运行时,它将在服务配置为使用的任何帐户下运行,并且在服务帐户下运行时根本不支持/推荐自动化办公。

如果您需要修改工作簿的内容,请考虑通过 C#/Powershell 使用 OpenXml 或 OLEDB。

© www.soinside.com 2019 - 2024. All rights reserved.