用于BoM的SolidWorks EPDM GetVar在VBA中不起作用

时间:2018-08-14 17:37:42

标签: vba excel-vba solidworks

这真的使我受阻,我怀疑是因为我现在太“接近”这个问题了。我正在将VB.NET例程转换为VBA例程。这是可以按预期工作的VB.NET代码。

    Dim rows() As Object
    BOM.GetRows(rows)
    Dim row As IEdmBomCell
    For Each row In rows
        If IsNothing(row) Then Exit For
        Dim rowString As String = row.GetTreeLevel.ToString & vbTab
        Dim varVal As String = ""

        For Each column As EdmBomColumn In columns
            row.GetVar(column.mlVariableID, column.meType, varVal, Nothing, Nothing, Nothing)
            If IsNothing(varVal) Then varVal = ""
            rowString = rowString & varVal & vbTab
        Next
        '-----------------------------WRITE THE ROW TO THE FILE 
        sw.writeline(rowString)
    Next`

我拥有的VBA代码如下:

Dim varVal As String
Dim rows() As Variant
Dim row As IEdmBomCell
Dim rowstring As String

Call BOM.GetRows(rows)

    For p = 0 To UBound(rows)
        Set row = rows(p)
        If IsEmpty(row) Then Exit For
            rowstring = row.GetTreeLevel & vbTab
            varVal = ""

           For i = 0 To UBound(columns)
                column = columns(i)
                Call row.GetVar(column.mlColumnID, column.meType, varVal, Nothing, "", True)
                rowstring = rowstring & varVal & vbTab
                Debug.Print rowstring
            Next
            '-----------------------------WRITE THE ROW TO THE FILE
           sw.writeline (rowstring)
    Next

我失败的地方是第Call row.GetVar(column.mlColumnID, column.meType, varVal, Nothing, "", True)行。

varVal变量从不返回值,但是代码正在逐步遍历每个列数据集。

所有正在处理的变量的VBA监视窗口。

Here is the VBA watch window for all the variables being worked on.

我想把责任归咎于行.GetVar调用中断了,但是.NET代码工作得很好(与VBA在同一台机器上)。我只是在某处必须做错工作。同样,该代码不会运行失败或产生任何错误,它只是不会创建预期的输出,如下所示:

预期输出:

Expected Output

VS。这是这个结果:

当前代码的结果:

Results of current code

3 个答案:

答案 0 :(得分:1)

聚会有点晚了,但我也遇到了这个问题。我已经使用 Variant 而不是 String 变量在 VBA 中工作了。

所以而不是 Dim varVal As String 尝试 Dim varVal As Variant

答案 1 :(得分:0)

在进一步研究API文档之后,我现在相当有把握地认为问题实际上出在VBA本身。

information已存在于SolidWorks API文档中,有几个版本。他们似乎建议不要在SolidWorks API应用程序中使用VBA,并确认使用VBA可能会导致意外行为。

我已经在评论中链接了此内容,但是出于完整性考虑,here是发行说明中的​​第一位,他们确认不支持VBA(VB6)。

答案 2 :(得分:0)

以前,我在使用VBA中的PDM API时遇到了问题,而我需要做的是创建一个COM wrapper来暴露我的需求。