Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 将实体属性指定给变量_Vba - Fatal编程技术网

Vba 将实体属性指定给变量

Vba 将实体属性指定给变量,vba,Vba,我不熟悉VBA或面向对象编程。我正试图让这段代码在罗克韦尔自动化公司的Arena的VBA编译器中运行 我有时会收到错误424:“需要对象”,调试后,我会被引用到XL。最后退出。有时我会遇到一个与使用ActiveEntity相关的错误。我不知道让Excel文件正常工作是我错了,还是与访问Arena的实体属性有关 你能发现错误吗?或者你对如何自己找到它有什么建议 Public Sub ModelLogic_RunBeginSimulation() Dim m As Model Set

我不熟悉VBA或面向对象编程。我正试图让这段代码在罗克韦尔自动化公司的Arena的VBA编译器中运行

我有时会收到
错误424:“需要对象”
,调试后,我会被引用到
XL。最后退出。有时我会遇到一个与使用
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

XL对象被声明为过程级别,因此不存在于另一个过程的范围内

如果希望变量或对象对所有过程都可见,请在模块开头声明它,可能类似于:

Public XL as Object
话虽如此,您也没有在另一个过程中声明它。将此行添加到此模块(以及每个模块)的最顶部:

这将迫使您正确地声明和处理变量、对象、属性等,并有助于防止此类问题

还有一件事:我打赌你至少运行过几次这段代码,对吗

保存您的工作,然后立即重新启动。相信我


更多信息:
  • MSDN:

  • 乔恩·斯凯特:


假设
XL
是在模块级别声明的,我认为错误与此行有关:

Set XL = GetObject("", "Excel.Application")
这需要运行Excel。当激发
ModelLogic\u RunEnd()
时,它会出现,尝试调用Excel的
.Quit()
方法,但
XL
无效

尝试将其更改为
CreateObject()
,看看这是否有帮助:

Set XL = CreateObject("Excel.Application")

XL
在哪里声明?如果它没有在任何地方声明,那么就
ModelLogic\u RunEnd
而言,它只是一个未声明的
变量
,VBA运行时无法知道它应该有一个
Quit
成员方法。在模块顶部指定
选项Explicit
;你的代码还在编译吗?(Alt+D,输入)
Set XL = CreateObject("Excel.Application")