Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/28.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SolidWorks EPDM GetVar,用于未在VBA中工作的BoM_Vba_Excel_Solidworks - Fatal编程技术网

SolidWorks EPDM GetVar,用于未在VBA中工作的BoM

SolidWorks EPDM GetVar,用于未在VBA中工作的BoM,vba,excel,solidworks,Vba,Excel,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.GetT

这件事让我很困惑,我怀疑这是因为我现在太“接近”这个问题了。我正在将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
我得到的失败是第行
调用row.GetVar(column.mlColumnID,column.meType,varVal,Nothing,“,True)

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

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

我想把责任归咎于row.GetVar调用被破坏,但是.NET代码工作得很好(与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
预期输出:

这就是这个结果:

当前代码的结果:


在深入研究API文档之后,我现在相当确信问题实际上是VBA本身

这已经在SolidWorksAPI文档中出现了几个版本。他们似乎建议不要在SolidWorksAPI应用程序中使用VBA,并确认使用VBA可能会导致意外行为


我已经在我的评论中链接了这一点,但为了完整起见,这是他们确认不支持VBA(VB6)的发行说明中的第一个位置

我以前在使用VBA的PDMAPI时遇到过问题,我需要做的是创建一个新的API来公开我需要的内容。

参加聚会有点晚,但我也遇到了这个问题。我让它在VBA中工作,使用变量而不是字符串变量

所以不是
Dim varVal作为字符串
尝试
Dim varVal As Variant

虽然我不能给您一个明确的答案,但我强烈怀疑这与SolidWorks在2008年停止对其PDM API的VB6支持有关。我已经在PDM测试加载项中测试了你的VB.NET代码,效果很好。据我所知,这些代码在功能上是相同的。看。“新功能和更改功能”下的第一项是“VB6不再受支持”。我很担心。我过去没有遇到过问题,但这并不意味着不会有进展。我将在这方面做更多的工作,但它似乎不是固定的。跟进是因为我感兴趣-你有没有让这个样本在VBA中工作过?如果是这样的话,你必须做什么?我所做的一切都不起作用。在一周左右的时间里,我们还会再看一看。