这真的使我受阻,我怀疑是因为我现在太“接近”这个问题了。我正在将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监视窗口。
我想把责任归咎于行.GetVar调用中断了,但是.NET代码工作得很好(与VBA在同一台机器上)。我只是在某处必须做错工作。同样,该代码不会运行失败或产生任何错误,它只是不会创建预期的输出,如下所示:
预期输出:
VS。这是这个结果:
当前代码的结果:
答案 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来暴露我的需求。