SolidWorks EPDM GetVar,用于未在VBA中工作的BoM
这件事让我很困惑,我怀疑这是因为我现在太“接近”这个问题了。我正在将VB.NET例程转换为VBA例程。下面是按预期工作的VB.NET代码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
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中工作过?如果是这样的话,你必须做什么?我所做的一切都不起作用。在一周左右的时间里,我们还会再看一看。