首页 > 解决方案 > Excel VBA - 链接标签和复选框

问题描述

我有以下用户表单:

在此处输入图像描述

使用下面的代码,我可以将每个选定复选框的名称保存到工作表中。该值将保存在同一列中,但在不同的行上(当然),因为可以选择多个复选框。

Dim indProdWs As Worksheet
Dim ctl As Control
Dim i As Long

Set indProdWs = tWb.Worksheets("INDICATION-PRODUCT")

i = 4
' This is the row where i want to save the first value
For Each ctl In seg_multipage.Pages(1).Controls
   If TypeName(ctl) = "CheckBox" Then
        If ctl.Value = True Then
            indProdWs.Cells(i, 9) = ctl.Caption: i = i + 1
        End If
    End If
Next ctl

但是,正如您在第一张图片中看到的那样,每行产品都有一个标签。

这就是我想要完成的:

如果选择了第二行中的 Product 22,那么我希望将名称保存在具有以下格式的单元格上:

标签 2 - 产品 22

或者,如果选择了第二行中的产品 51:

标签 5 - 产品 51

如您所见,标签编号始终与产品的第一位数字匹配。我尝试使用它作为变量,但我没有成功。

谢谢你能给我的任何帮助!

标签: excelvba

解决方案


这个名字实际上是“Product22”还是只是一个例子?– Siddharth Rout 6 分钟前

@SiddharthRout 只是一个示例,但格式相似。实际名称是 seg_cb_selInd_22(例如)。– soraia635 1 分钟前

这是你正在尝试的吗?

将代码更改For - Next为以下

For Each ctl In seg_multipage.Pages(1).Controls
   If TypeName(ctl) = "CheckBox" Then
        If ctl.Value = True Then
            indProdWs.Cells(i, 9) = Controls("seg_l_selInd_" & _
                                    GetNumber(ctl.Name)).Caption & _
                                    " - " & _
                                    ctl.Name
            i = i + 1
        End If
    End If
Next ctl

然后将此函数添加到您的代码中

Private Function GetNumber(s As String)
    Dim numb As Long
    Dim i As Long
    
    For i = 1 To Len(s)
        Select Case Mid(s, i, 1)
        Case 0 To 9
            numb = Mid(s, i, 1)
            Exit For
        End Select
    Next
    
    GetNumber = numb
End Function

注意:此函数假定您将向其传递一个字母数字字符串。


推荐阅读