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

时间:2017-07-18 15:24:41

标签: vba excel-vba ms-project excel

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

编辑: 崩溃来自以下Set。我已经尝试过早期绑定Dim xlApp as Excel.Application,但无论如何都会崩溃。

Dim xlApp As Object
Set xlApp = New Excel.Application

还有另一种方法可以将xlApp设置为Excel对象吗?

3 个答案:

答案 0 :(得分:0)

    Dim xlApp As Object
    Set xlApp = CreateObject("Excel.Application")

尝试延迟绑定Excel对象并删除引用。

答案 1 :(得分:0)

我建议使用Late Binding。正如@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

答案 2 :(得分:0)

请试试这个,看它是否也会崩溃。

它创建单词object,然后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