0

编译错误:

编译错误:只有在公共对象模块中定义的用户定义类型才能强制转换为变体或从变体强制转换或传递给后期绑定函数。

我是 VBA 新手,我的任务是调试 Dynamics SL 中自定义屏幕的一些代码。我做的第一件事是查看它是否编译并收到上述消息。

当我阅读内置帮助参考时,我发现上述错误如下:

您试图将公共用户定义类型用作类模块的公共过程的参数或返回类型,或者用作公共用户定义类型的字段。只有在公共对象模块中定义的公共用户定义类型才能以这种方式使用。

我也经历了这些类似的问题:

他们有同样的错误,但我没有看到上述两个问题所关注的集合对象。

如果您知道可能导致此错误的原因,请随时提出建议。

代码:

Private Sub cpjt_entity_Chk(ChkStrg As String, retval As Integer)
Dim ldDate As Sdate
Dim xStrDailyPost As Sdate

ldDate.val = GetObjectValue("cpe_date")
'xStrDailyPost = DateToStr(ldDate)
'Call MsgBox("Daily Post Date: " & xStrDailyPost, vbOKOnly, "TEST")
serr1 = SetObjectValue("cld_id08", xStrDailyPost) <- Error highlights "xStrDailyPost"

End Sub

SetObjectValue 的定义:

Declare Function SetObjectValue Lib "swimapi.dll" Alias "VBA_SetObjectValue" (ByVal ctlname$, newval As Variant) As Integer

先感谢您!

4

1 回答 1

0

您可能正在使用最初使用 Dynamics SL(实际上当时是 Solomon IV)基本脚本语言 (BSL) 宏语言而不是 VBA 编写的代码。

无论如何...解决方法是,传递 SDate 的 xStrDailyPost 实例的“val”方法的结果。所以代码应该是这样的:

serr1 = SetObjectValue("cld_id08", xStrDailyPost.val)

我实际上没有对此进行测试,但我很确定这将解决您的问题。

如果您想要更多背景知识,“Sdate”实际上只是一个非常薄的整数包装(实际上我认为它很短,但我从未发现我真的需要确定)。“Val”方法返回 SDate 变量中的基础整数。

于 2017-10-19T13:18:07.347 回答