VBA宏在一台计算机上运行,但在另一台计算机上不运行

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 =

我有一个宏可以在我的计算机上正常运行,但是当我把这个宏放到另一台计算机上时,它甚至不允许在调试模式下运行。它只是使MS项目崩溃,说它停止工作了

编辑: 崩溃来自以下
集合
。我已经尝试过早期绑定以及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
时进入了调试模式,因为你给了我们一点建议,我想你应该使用后期绑定而不是早期绑定。