【发布时间】:2019-08-10 05:59:23
【问题描述】:
我来自 C# 背景,我正在尝试将一些 C# 代码移植到 VBA 以在 excel 文件中使用。
我有一个函数,它接受一个类型(许多属性)并且应该对它做一些工作。这是代码的sn-p:
Public Function CalculateThrust(ByVal PumpParams As PumpParameters) As AxialThrustValues
Dim statVars As StaticVariables
Set statVars = New StaticVariables
statVars.Init (PumpParams)
'empty return obj provision
Dim ret As AxialThrustValues
Set ret = New AxialThrustValues
If PumpParams.NumberOfStages > 3 Then
ret.AxialThrust = -1 * statVars.FAES
我的问题是,当我调试时,它会直接跳到最后一个变量“FAES”并说:
“编译错误:找不到方法或数据成员”
也许我在 VBA 语言中遗漏了一些东西,但我的过程是函数应该这样评估:
- 以“PumpParams”参数输入
- 使用“PumpParams”实例化 statVars 对象
- 能够访问 statVars.FAES,因为对象已被实例化...
非常感谢任何能帮助我克服这个障碍的想法,谢谢。
StaticVariables 类的片段:
Private InputParameters As PumpParameters
Public Sub Init(InputParameters As PumpParameters)
InputParameters = PumpParameters
setPropsInitial
setConditionals
End Sub
Public GAM, VISCOS, OMEGA, U2S, U2N, FMS, FMN, CAES, CAHS, CAEN, CAHN, P1S, PST, FAES, FAHS, FAEN, FAHN, FATB, FAIB, PCB, FACB, FAHDCB, FAHSCB, PHDE, PHSE As Double
Private Sub setPropsInitial()
FAES = CalcForcesAtImpEye(InputParameters.SuctionImpDia, InputParameters.SuctionStageEyeRingDia, P1S, GAM, U2S, CAES, FMS)...
【问题讨论】:
-
我不确定 它直接跳转到最后一个变量“FAES” 是什么意思。它是否特别突出了
ret.AxialThrust = -1 * statVars.FAES行?您确定它不在必须remove the parentheses 的statVars.Init (PumpParams)行上吗?你有Option Explicit吗?如果将光标放在StaticVariables并按 Shift+F2,它会带你去哪里? -
是的,它会突出显示 FAES 并显示错误。我添加了“选项显式”(以前没有),但是出现了相同的错误消息。 Shift+F2 将我带到“Dim statVars...”行
-
在静态变量之上添加 Oprion Explicit。那些公共变量需要在类的顶部(在第一个方法之前)而不是在一个方法中?
-
是的,当然。模块级变量必须在任何方法之前声明。将
Public GAM, VISCOS, OMEGA, ...行移动到Sub Init或模块中的任何其他子之前。 (缺少的引用将在其前面用大写MISSING:表示;即使有一个,它也可能会破坏在完全不相关的程序集中对现有成员的查找,因此您需要始终检查这一点。) -
请注意您的
Public GAM, VISCOS, OMEGA, ...。除了最后一个之外,所有这些都声明为Variant