VBS在一台服务器上运行.xlsm工作簿中的VBA宏,但不是另一台

时间:2017-01-17 21:45:04

标签: vba excel-vba vbscript server-configuration excel

问题:

我有一个VBScript打开一个.xlsm工作簿并执行一些宏。 VBScript&中的代码VBA宏已经过全面测试并且运行良好,但仅限于1台服务器上,"生产"服务器。

尝试在第二台服务器上运行VBS时,"测试"服务器,VBS成功打开工作簿并成功执行初步宏来收集进程信息,但是在尝试执行标题为“#Auto; Run"”的第二个宏时,它会遇到非常神秘的错误,之后VBS关闭工作簿并完美地执行其余代码。

为什么这种方法在一台服务器上运行正常而另一台服务器运行不正常?我从哪里开始排除故障?

如果您认为自己可以提供帮助,但需要我提供更多信息,请务必说明,我会提供。

详细说明:

有效的初步宏实际上是' GetCurrentProcessID'来自kernel32。通过以下代码行添加到宏中:​​

Declare PtrSafe Function GetCurrentProcessId Lib "kernel32" () As Long

尝试执行第二个宏时从VBScript返回的神秘错误:" Auto_Run"在"测试"服务器是:

Err.Source = ""
Err.Code = -2147417851
Err.Description = "<Error> | -2147417851: </Error>"

第二个宏的子&#39; Auto_Run&#39;:

Sub Auto_Run()
    On Error GoTo e
    QLog "'Auto_Run' Starting..."
    modMain.bAuto = True

    Main bAuto

QLog "'Auto_Run' Completed."
x:
    Exit Sub
e:
    QLog "'Auto_Run' " & Get_Err
    Resume x
End Sub

QLog是一个子程序,它将传递给它的字符串参数的内容写入3个地方,1表示状态栏,2表示进度指示表单(仅在手动执行时可选地显示)&amp; 3,最重要的是,到数据库日志表。

&#34; Auto_Run&#34;的第二个可执行行甚至不执行:

        QLog "'Auto_Run' Starting..."

应该登录到数据库日志表,但当然是空的。

事件查看器:

我在事件查看器中检查了应用程序日志,发现了3个相关事件。

1&#39;应用程序错误&#39;类型事件:

Faulting application name: EXCEL.EXE, version: 14.0.7177.5000, time stamp: 0x582c88af
Faulting module name: VBE7.DLL, version: 7.0.16.40, time stamp: 0x57fbbbf8
Exception code: 0xc0000005
Fault offset: 0x000000000000278d
Faulting process id: 0x1c0c
Faulting application start time: 0x01d2710609568608
Faulting application path: C:\Program Files\Microsoft Office\Office14\EXCEL.EXE
Faulting module path: C:\PROGRA~1\COMMON~1\MICROS~1\VBA\VBA7\VBE7.DLL
Report Id: 488b9548-dcf9-11e6-bf1b-3a017bdb52e6

1&#39; Windows报告错误&#39;信息类型事件:

Fault bucket , type 0
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: EXCEL.EXE
P2: 14.0.7177.5000
P3: 582c88af
P4: VBE7.DLL
P5: 7.0.16.40
P6: 57fbbbf8
P7: c0000005
P8: 000000000000278d
P9: 
P10: 

Attached files:
C:\Users\<redacted>\AppData\Local\Temp\2\CVRA045.tmp.cvr
C:\Users\<redacted>\AppData\Local\Temp\WERA9F5.tmp.appcompat.txt
C:\Users\<redacted>\AppData\Local\Temp\WERAB0F.tmp.WERInternalMetadata.xml
C:\Users\<redacted>\AppData\Local\Temp\WERAB2F.tmp.hdmp
C:\Users\<redacted>\AppData\Local\Temp\WERADA0.tmp.mdmp

These files may be available here:
C:\Users\<redacted>\AppData\Local\Microsoft\Windows\WER\ReportQueue\AppCrash_EXCEL.EXE_33353b1e5e166abad4dbe725c82a3feea72c43_cab_be21aeb6

Analysis symbol: 
Rechecking for solution: 0
Report Id: c39d1908-dcfb-11e6-bf1b-3a017bdb52e6
Report Status: 4

最后还有1个&#39; Windows错误报告&#39;信息类型:

Fault bucket 422681129, type 28
Event Name: APPCRASH
Response: Not available
Cab Id: 0

Problem signature:
P1: EXCEL.EXE
P2: 14.0.7177.5000
P3: 582c88af
P4: VBE7.DLL
P5: 7.0.16.40
P6: 57fbbbf8
P7: c0000005
P8: 000000000000278d
P9: 
P10: 

Attached files:
C:\Users\<redacted>\AppData\Local\Temp\2\CVRA045.tmp.cvr
C:\Users\<redacted>\AppData\Local\Temp\WERA9F5.tmp.appcompat.txt
C:\Users\<redacted>\AppData\Local\Temp\WERAB0F.tmp.WERInternalMetadata.xml
C:\Users\<redacted>\AppData\Local\Temp\WERAB2F.tmp.hdmp
C:\Users\<redacted>\AppData\Local\Temp\WERADA0.tmp.mdmp

These files may be available here:
C:\Users\<redacted>\AppData\Local\Microsoft\Windows\WER\ReportArchive\AppCrash_EXCEL.EXE_33353b1e5e166abad4dbe725c82a3feea72c43_b759b319

Analysis symbol: 
Rechecking for solution: 0
Report Id: c39d1908-dcfb-11e6-bf1b-3a017bdb52e6
Report Status: 0

我尝试了什么

我尝试将Excel应用程序的Visible属性设置为True &安培;调整&#34; Auto_Run&#34;稍微简单一些,看它是否会执行&amp;它没有。

VBS:

oXL.Visible = True
oXL.Application.Run "'" & sName & "'!" & sMacro

VBA

Sub Auto_Run()
    'Test
    MsgBox "Help Me Please"
End Sub

回复评论

共产国际 -

These servers are on the same network & the program is being executed by the same AD User.
What other permissions would I have to adjust?

ClintB -

Running under the same AD user on the same network. Also, Excel is successfully opening & executing the first macro, just not the 2nd one.

-- Full Automation Works
Prod Server OS: Windows Server 2008 R2 Standard SP1 - 64 bit
Prod Server XL: 14.07177.5000 (32-bit)

-- Doesn't work
Test Server OS: Windows Server 2008 R2 Enterprise SP1 - 64 bit
Test Server XL: 14.07177.5000 (64-bit)

Nick.McDermaid -

Manual Execution on either server works as expected.

P.S。 如果这是重复的话,我道歉,但我还没有找到任何相关内容。我可能很难说它,但我认为值得一试它。

1 个答案:

答案 0 :(得分:0)

事实证明,这一切都归结为体系结构和司机。

在将office professional 2010重新安装为32位而不是64位后,我成功地使用VBS成功执行了第二个宏。

另外,从64位切换到32位解决了这个问题,但为我创造了一些其他问题。这打破了我根据我安装的64位AccessDatabaseEngine驱动程序设置的进程,使用'OpenRowSet'和'amp;来查询excel文件到SQL Server表。 'Microsoft.ACE.OLEDB.12.0',所以我最终重新安装了64位,因为该功能对我来说更重要。我可以将SQL Server重新安装为32位,这也可以工作,&amp;可能会是更好的长期解决方案,因为我会使两个功能都正常运行,但这似乎更麻烦。此外,64位SQL Server处理内存比32位好得多,这是我选择此路由的另一个原因。

对于遇到此问题第二部分的任何人,我找到了一个非常好的透视图: https://www.excel-sql-server.com/excel-import-to-sql-server-using-distributed-queries.htm

也是这个: https://blogs.msdn.microsoft.com/farukcelik/2010/06/04/accessing-excel-files-on-a-x64-machine/