【问题标题】:CATIA-VBA error: Function or interface marked restricted ... automation type not supported in Visual BasicCATIA-VBA 错误:标记为受限的函数或接口... Visual Basic 不支持自动化类型
【发布时间】:2017-05-18 05:49:18
【问题描述】:

我在 VBA 宏文件中记录了一行创建,它生成了以下代码:

Sub CATMain()
    Dim partDocument1 As PartDocument
    Set partDocument1 = CATIA.ActiveDocument
    Dim part1 As Part
    Set part1 = partDocument1.Part
    Dim bodies1 As Bodies
    Set bodies1 = part1.Bodies
    Dim body1 As Body
    Set body1 = bodies1.Item("PartBody")
    Dim sketches1 As Sketches
    Set sketches1 = body1.Sketches
    Dim originElements1 As OriginElements
    Set originElements1 = part1.OriginElements
    Dim reference1 As Reference
    Set reference1 = originElements1.PlaneYZ
    Dim sketch1, sketch1Variant As Sketch *
    Set sketch1 = sketches1.Add(reference1)
    Dim arrayOfVariantOfDouble1(8)
    arrayOfVariantOfDouble1(0) = 0#
    ...
    arrayOfVariantOfDouble1(8) = 1#
    Set sketch1Variant = sketch1
    sketch1Variant.SetAbsoluteAxisData **
    arrayOfVariantOfDouble1
    part1.InWorkObject = sketch1
    Dim factory2D1 As Factory2D
    Set factory2D1 = sketch1.OpenEdition()
    Dim geometricElements1 As GeometricElements
    Set geometricElements1 = sketch1.GeometricElements
    Dim axis2D1 As Axis2D
    Set axis2D1 = geometricElements1.Item("AbsoluteAxis")
    Dim line2D1 As Line2D
    Set line2D1 = axis2D1.GetItem("HDirection")
    line2D1.ReportName = 1
    Dim line2D2 As Line2D
    Set line2D2 = axis2D1.GetItem("VDirection")
    line2D2.ReportName = 2
    Dim point2D1 As Point2D
    Set point2D1 = factory2D1.CreatePoint(21.285706, -30.501825)
    point2D1.ReportName = 3
    Dim point2D2 As Point2D
    Set point2D2 = factory2D1.CreatePoint(112.826553, -68.875053)
    point2D2.ReportName = 4
    Dim line2D3 As Line2D
    Set line2D3 = factory2D1.CreateLine(21.285706, -30.501825, 112.826553, -68.875053)
    line2D3.ReportName = 5
    line2D3.StartPoint = point2D1
    line2D3.EndPoint = point2D2
    sketch1.CloseEdition
    part1.InWorkObject = body1
    part1.Update
End Sub

现在 问题是,当我在录制后按原样运行代码时,出现以下错误:

加载 dll 时出错。

比我在 * 行添加 sketch1Variant 对象并再次运行代码。 这次我得到了

“函数或接口被标记为受限,或者函数使用了 Visual Basic 不支持的自动化类型”** 行错误。

我不知道怎么了。 任何信息都非常感谢。 提前谢谢你。

【问题讨论】:

    标签: vba catia


    【解决方案1】:

    基本规则是:使用 VBA 时,任何以数组作为参数或通过参数返回的 CATIA 方法都必须在变体对象上调用。

    您已将 Sketch1Variant 声明为 Sketch。 SetAbsoluteAxisData 将数组作为参数。

    你想要的是这个:

    Dim Sketch1 as Sketch
    
    Dim Sketch1Variant as Variant 
    

    (或者只保留“作为变体”部分)。

    通过此更改,您应该能够解决您的问题。

    以后请先进行网络搜索,因为这是一个非常常见的问题。 coe.org 是一个很好的搜索网站。

    【讨论】:

    • 嗨,C,您找不到太多关于 CATIA-VBA 的文档。我也在coe上发过帖子,但是什么都没有。这是我最后一次机会。所以,谢谢。
    • 这是正确答案。它被称为“后期绑定”。缺点是您对变体对象类型没有智能感知。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-29
    • 1970-01-01
    • 2014-04-09
    • 1970-01-01
    • 2012-02-07
    • 1970-01-01
    相关资源
    最近更新 更多