我想运行一个 VBA 宏来创建一个文件夹,然后复制该文件夹中的 Excel 文件,然后修改它们。
我在本地完美运行这个宏(我按宏编辑器中的“播放”按钮)。我尝试直接在我的电脑上通过 PowerShell 脚本运行它,它也运行良好。我尝试创建一个包 SSIS,它使用之前的 PowerShell 脚本调用 ps1 文件,当我在本地运行它时,它工作得很好。
但是,当我尝试在 SSMS 中使用 SQL 代理作业执行此操作时,作业步骤只是加载、加载、加载,但永远不会结束(并且不起作用)。
在SSMS中我们有2种情况:
ps1
文件:作业一遍又一遍地运行,永远不会停止,也没有任何反应不幸的是,没有错误消息,什么也没有,当我尝试在本地运行某些东西时,一切都很好,一切都工作得很好。
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 Agent 下运行时,它将在服务配置为使用的任何帐户下运行,并且在服务帐户下运行时根本不支持/推荐自动化办公。
如果您需要修改工作簿的内容,请考虑通过 C#/Powershell 使用 OpenXml 或 OLEDB。