VBA:只有公共对象模块中定义的用户定义类型才能被强制转换为变体或从变量强制转移或传递给后期绑定函数

时间:2017-09-14 20:36:57

标签: vba microsoft-dynamics dynamics-sl

编译错误:

  

编译错误:仅公共对象中定义的用户定义类型   模块可以被强制转换为变体,也可以传递给变体   功能

我是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

提前谢谢!

1 个答案:

答案 0 :(得分:0)

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

无论如何......解决方法是,通过&#34; val&#34;您的xStrDailyPost SDate实例的方法。代码看起来应该是这样的:

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

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

如果你想要更多的背景,&#34; Sdate&#34;实际上只是一个整数的一个非常薄的包装(实际上我认为它是一个简短的,但我从来没有发现我真的需要确定)。 &#34; Val&#34; method返回SDate变量中的基础整数。