我是VBA或面向对象编程编程的新手。我试图让这段代码在Rockwell Automation的VBA编译器中工作。
我有时会得到Error 424: 'Object required'
,经过调试后我会在最后提到XL.Quit
。有时我会遇到与使用ActiveEntity
相关的错误。我不知道我是否错误地将Excel文件用于工作,或者是否已经对访问Arena的实体属性做了些什么。
你能发现错误吗?或者您是否有关于如何自己找到它的建议?
Public Sub ModelLogic_RunBeginSimulation()
Dim m As Model
Set m = ThisDocument.Model
Dim s As SIMAN
Set s = m.SIMAN
Dim FileToOpen As String
Dim ArenaDir As String
Set XL = GetObject("", "Excel.Application")
ArenaDir = Mid(m.FullName, 1, Len(m.FullName) - Len(m.Name))
FileToOpen = ArenaDir & "data.xlsx"
XL.Workbooks.Open FileToOpen
End Sub
Public Sub VBA_Block_1_Fire()
Dim RNEG_deltaw As Double, Z_deltaw As Double, RPOS_deltaw As Double
Dim R_SI As Double, Z_SI As Double, S_SI As Double
Dim SI As Double, NumContenedor As Integer, Wo As Double, W_1 As Double, deltaW As Double
NumContenedor = s.EntityAttribute(s.ActiveEntity,s.SymbolNumber("NumContenedor"))
SI = XL.Workbooks(1).Worksheets(1).Cells(NumContenedor, 3).value
s.EntityAttribute(s.ActiveEntity, s.SymbolNumber("deltaW")) = SI
End Sub
Public Sub ModelLogic_RunEnd()
XL.Quit
End Sub
答案 0 :(得分:1)
XL对象被声明为过程级别,因此不存在于另一个过程的范围内。
如果您希望变量或对象对所有过程可见,请在模块的开头声明它,或许如下:
Public XL as Object
话虽如此,你也没有在其他程序中声明XL
。将此行添加到此模块的最顶层(以及每个模块):
Option Explicit
这将迫使您正确声明和处理变量,对象,属性等,并帮助防止此类问题。
还有一件事:我敢打赌你至少运行过几次代码,对吗?
立即保存您的工作,然后重新启动。请相信我。
答案 1 :(得分:0)
假设在模块级别声明XL
,我认为错误与此行有关:
Set XL = GetObject("", "Excel.Application")
这需要Excel运行。在ModelLogic_RunEnd()
被触发时会出现,尝试调用Excel的.Quit()
方法,但XL
无效。
尝试将其更改为CreateObject()
并查看是否有帮助:
Set XL = CreateObject("Excel.Application")