VBA宏在一台计算机上运行,但在另一台计算机上不运行
我有一个宏可以在我的计算机上正常运行,但是当我把这个宏放到另一台计算机上时,它甚至不允许在调试模式下运行。它只是使MS项目崩溃,说它停止工作了 编辑: 崩溃来自以下VBA宏在一台计算机上运行,但在另一台计算机上不运行,vba,excel,ms-project,Vba,Excel,Ms Project,我有一个宏可以在我的计算机上正常运行,但是当我把这个宏放到另一台计算机上时,它甚至不允许在调试模式下运行。它只是使MS项目崩溃,说它停止工作了 编辑: 崩溃来自以下集合。我已经尝试过早期绑定以及Excel.Application的Dim xlApp,但还是崩溃了 Dim xlApp As Object Set xlApp = New Excel.Application 是否有其他方法将xlApp设置为Excel对象 Dim xlApp As Object Set xlApp =
集合
。我已经尝试过早期绑定以及Excel.Application的Dim xlApp,但还是崩溃了
Dim xlApp As Object
Set xlApp = New Excel.Application
是否有其他方法将xlApp设置为Excel对象
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
尝试延迟绑定Excel对象并删除引用。我建议使用延迟绑定。正如@Josh所说,您需要删除库引用并更新大部分代码
任何特定于Excel的常数都需要更新为其数值等效值。
例如,当使用PasteSpecial
时,您会使用类似xlPasteValues
在Excel中打开即时窗口并输入?xlPasteValues
。这将返回-4163
,这是您必须在代码中输入的数字,以代替xlPasteValues
Sub Test()
Dim oXL As Object
Dim oWrkBk As Object
Dim oWrkSht As Object
Set oXL = CreateXL
Set oWrkBk = oXL.Workbooks.Open("C:\Workbook1.xlsx")
Set oWrkSht = oWrkBk.worksheets("Sheet1")
With oWrkSht
.Range("A1").Copy
.Range("B1").PasteSpecial -4163 'xlPasteValues
End With
End Sub
Public Function CreateXL(Optional bVisible As Boolean = True) As Object
Dim oTmpXL As Object
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'Defer error trapping in case Excel is not running. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''
On Error Resume Next
Set oTmpXL = GetObject(, "Excel.Application")
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'If an error occurs then create an instance of Excel. '
'Reinstate error handling. '
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
If Err.Number <> 0 Then
Err.Clear
On Error GoTo ERROR_HANDLER
Set oTmpXL = CreateObject("Excel.Application")
End If
oTmpXL.Visible = bVisible
Set CreateXL = oTmpXL
On Error GoTo 0
Exit Function
ERROR_HANDLER:
Select Case Err.Number
Case Else
MsgBox "Error " & Err.Number & vbCr & _
" (" & Err.Description & ") in procedure CreateXL."
Err.Clear
End Select
End Function
子测试()
作为对象的Dim-oXL
作为对象的Dim oWrkBk
作为对象的Dim oWrkSht
设置oXL=CreateXL
设置oWrkBk=oXL.Workbooks.Open(“C:\Workbook1.xlsx”)
设置OWRKHT=oWrkBk.工作表(“表1”)
与奥克什特
.范围(“A1”).副本
.范围(“B1”).PasteSpecial-4163'XLPasteValue
以
端接头
作为对象的公共函数CreateXL(可选bVisible As Boolean=True)
作为对象的Dim oTmpXL
'''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果Excel未运行,则延迟错误捕获。'
'''''''''''''''''''''''''''''''''''''''''''''''''''''
出错时继续下一步
设置oTmpXL=GetObject(,“Excel.Application”)
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果发生错误,则创建Excel实例。'
“恢复错误处理。”
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
如果错误号为0,则
呃,明白了
关于错误转到错误处理程序
设置oTmpXL=CreateObject(“Excel.Application”)
如果结束
oTmpXL.Visible=bVisible
设置CreateXL=oTmpXL
错误转到0
退出功能
错误\u处理程序:
选择案例错误编号
其他情况
MsgBox“错误”和错误编号、vbCr和_
过程CreateXL中的(&Err.Description&')
呃,明白了
结束选择
端函数
请尝试此操作,看看它是否也会崩溃
它创建word对象,然后创建excel对象并退出。每次创建对象时,它都会显示对象名称
我假设您也安装了msword
注意:如果您从网页复制代码,请确保引号正确。引号似乎有几种版本(开始引号、结束引号),这些在VBA中无效
Sub test()
Dim myApp As Object
Set myApp = CreateObject("Word.Application")
MsgBox myApp.Name
Set myApp = CreateObject("Excel.Application")
MsgBox myApp.Name
Set myApp = Nothing
End Sub
两台计算机上都有操作系统?两台计算机上的Office版本?每台计算机上的MS Project版本相同?是的,操作系统和MS Project相同。唯一不同的是Excel,我使用代码中的库,但我在两台计算机上都引用了它。很抱歉,我害怕共享机密数据。我编辑了这篇文章,因为我在评论Set xlApp
时进入了调试模式,因为你给了我们一点建议,我想你应该使用后期绑定而不是早期绑定。