我有一个在我的计算机上正常运行的宏,但是当我将这个宏放在另一台计算机上时,它甚至不允许在调试模式下运行。它只是崩溃了MS Project,说它停止了工作。
编辑:
崩溃来自以下Set
。我已经尝试过早期绑定Dim xlApp as Excel.Application
,但无论如何都会崩溃。
Dim xlApp As Object
Set xlApp = New Excel.Application
还有另一种方法可以将xlApp设置为Excel对象吗?
答案 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