SolidWorks API(VBA)将字符串存储在数组中

发布于 2025-01-18 14:59:17 字数 1310 浏览 2 评论 0原文

我想以数组的形式存储尺寸名称(字符串),以便我可以将另一个数组(尺寸名)与当前进行比较。

Public Sub WhateverName

    Dim swApp As SldWorks.SldWorks
    Dim swModel As ModelDoc2
    Dim swPart As PartDoc
    Dim swFeat As Feature
    Dim swDispDim As DisplayDimension
    Dim swDim As Dimension
    Dim vDimVals As Variant
    Dim swDimInfoNameArr As Variant
    Dim SKETCH_NAME As String
    Dim i As Variant
    Dim swDimName As Variant
    Dim swDispDimname As String
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swPart = swModel
    SKETCH_NAME = "ISO Standard"
    Set swFeat = swPart.FeatureByName(SKETCH_NAME)
    Set swDispDim = swFeat.GetFirstDisplayDimension
        
        Do While Not swDispDim Is Nothing
            i = 0
            'For i = 0 To 4
            Set swDim = swDispDim.GetDimension2(Empty)
            vDimVals = swDim.GetValue3(swThisConfiguration, Empty)
           
            Debug.Print swDim.Name & "@" & SKETCH_NAME & ": " & Round(vDimVals(0), 6)
            Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
            swDimName = swDim.Name
            swDimInfoNameArr(i) = swDimName 'swModel.GetCustomInfoNames2     --> ERROR
            i = i + 1
            'Next
        Loop

End Sub

第27行正在抛出错误“类型不匹配”

I want to store the dimension name (string) in the form of the array so that I can compare another array (dimension name) to the current.

Public Sub WhateverName

    Dim swApp As SldWorks.SldWorks
    Dim swModel As ModelDoc2
    Dim swPart As PartDoc
    Dim swFeat As Feature
    Dim swDispDim As DisplayDimension
    Dim swDim As Dimension
    Dim vDimVals As Variant
    Dim swDimInfoNameArr As Variant
    Dim SKETCH_NAME As String
    Dim i As Variant
    Dim swDimName As Variant
    Dim swDispDimname As String
    
    Set swApp = Application.SldWorks
    Set swModel = swApp.ActiveDoc
    Set swPart = swModel
    SKETCH_NAME = "ISO Standard"
    Set swFeat = swPart.FeatureByName(SKETCH_NAME)
    Set swDispDim = swFeat.GetFirstDisplayDimension
        
        Do While Not swDispDim Is Nothing
            i = 0
            'For i = 0 To 4
            Set swDim = swDispDim.GetDimension2(Empty)
            vDimVals = swDim.GetValue3(swThisConfiguration, Empty)
           
            Debug.Print swDim.Name & "@" & SKETCH_NAME & ": " & Round(vDimVals(0), 6)
            Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
            swDimName = swDim.Name
            swDimInfoNameArr(i) = swDimName 'swModel.GetCustomInfoNames2     --> ERROR
            i = i + 1
            'Next
        Loop

End Sub

27th line is throwing the error "Type Mismatch"

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

a√萤火虫的光℡ 2025-01-25 14:59:17

您需要声明数组的大小,或使用其他对象存储。像词典一样:

Option Explicit
Sub main()

Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swPart As PartDoc
Dim swFeat As Feature
Dim swDispDim As DisplayDimension
Dim swDim As Dimension
Dim vDimVals As Variant
Dim SKETCH_NAME As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
SKETCH_NAME = "ISO Standard"
Set swFeat = swPart.FeatureByName(SKETCH_NAME)
Set swDispDim = swFeat.GetFirstDisplayDimension
 
    Do While Not swDispDim Is Nothing
        Set swDim = swDispDim.GetDimension2(Empty)
        vDimVals = swDim.GetValue3(swThisConfiguration, Empty)
        Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
        dict.Add swDim.Name, Round(vDimVals(0), 6)
        
        Debug.Print dict.keys()(dict.Count - 1) & "@" & SKETCH_NAME & ": " & dict.Items()(dict.Count - 1)
    Loop
End Sub

You need to declare the size of the array, or use an other object to store. Like a dictionnary:

Option Explicit
Sub main()

Dim swApp As SldWorks.SldWorks
Dim swModel As ModelDoc2
Dim swPart As PartDoc
Dim swFeat As Feature
Dim swDispDim As DisplayDimension
Dim swDim As Dimension
Dim vDimVals As Variant
Dim SKETCH_NAME As String
Dim dict As Object
Set dict = CreateObject("Scripting.Dictionary")

Set swApp = Application.SldWorks
Set swModel = swApp.ActiveDoc
Set swPart = swModel
SKETCH_NAME = "ISO Standard"
Set swFeat = swPart.FeatureByName(SKETCH_NAME)
Set swDispDim = swFeat.GetFirstDisplayDimension
 
    Do While Not swDispDim Is Nothing
        Set swDim = swDispDim.GetDimension2(Empty)
        vDimVals = swDim.GetValue3(swThisConfiguration, Empty)
        Set swDispDim = swFeat.GetNextDisplayDimension(swDispDim)
        dict.Add swDim.Name, Round(vDimVals(0), 6)
        
        Debug.Print dict.keys()(dict.Count - 1) & "@" & SKETCH_NAME & ": " & dict.Items()(dict.Count - 1)
    Loop
End Sub
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文