将文本框分组以在 VBA 中创建数组

问题描述 投票:0回答:1

我想在装配体中自动保存 SolidWorks 文件。将保存的每个部件的名称是根据用户表单中给出的输入创建的。

用户可以确定要保存的数量和部件。此代码用于创建零件数组;

Dim Control As Control, ArrayParts As String
For Each Control In Me.Controls
If TypeName(Control) = "CheckBox" Then
    If Control.Value Then
        ArrayParts = IIf(ArrayParts <> "", ArrayParts & ",", "") & Control.Caption
    End If
End If
Next

附件用户表单下方:

enter image description here

如果用户选择零件(在本例中为 2 个零件),那么这 2 个零件将被保存,看起来有点像下面这样:

For i = LBound(ArrayList) To UBound(ArrayList)
  finalName = PathCut & "XT\" & partcode & " " & ArrayList(i) & " " & REVCode & Extension
  swModelToExport.Extension.SaveAs3 finalName, 0, 1, Nothing, Nothing, nErrors, nWarnings
Next 

零件的输出可以是“.....XTS Part1 1.X_T 其中零件代码和 REVCode 在用户表单中确定。 ArrayList 包含以下部分

目前,所有零件都有相同的“REV代码”。但是,我希望用户能够手动调整每个零件的 REV 代码。因此,如果选择第 1 部分,则文本框“txtREV1”的值将用于命名该部分。我的问题是我不确定如何在我的代码中实现这一点。我想使用与“ArrayParts”相同的方法,但我不想选择所有文本框作为控件,而只选择出现在用户窗体上的部件旁边的文本框。我尝试对文本框进行分组,但文本框没有“组名属性”选项卡,据我所知,仅适用于复选框。 欢迎任何提示。谢谢你

vba textbox userform solidworks groupname
1个回答
0
投票

你没有回答我的澄清问题...

但是假设我的假设是正确的(复选框的数字部分之间存在相关性,与字母数字部分之间用空格分隔),您需要下一个函数,能够提取相应的文本框值:

private Function getREV(UF As Object, txtPart As String) As String
  Dim c As Control, nOPart As Long
  Const refRoot As String = "txtREV" 'use here your real text box naming prefix!
  nOPart = Split(txtPart)(1) 'extract the numeric part
  For Each c In UF.Controls
    If TypeName(c) = "TextBox" Then
        If c.Name = refRoot & nOPart Then getREV = c.text: Exit For
    End If
  Next c
End Function

并将其放在表单模块中,您可以将必要的路径定义为:

finalName = PathCut & "XT\" & partcode & " " & ArrayList(i) & " " & getREV(Me, CStr(ArrayList(0))) & Extension
© www.soinside.com 2019 - 2024. All rights reserved.