Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Visual Basic Excel在代码中创建复选框_Excel_Vba - Fatal编程技术网

Visual Basic Excel在代码中创建复选框

Visual Basic Excel在代码中创建复选框,excel,vba,Excel,Vba,我在Excel文件中添加了一个按钮,当单击该按钮时,它将读取文本文件并用文本文件中的行填充列。我需要在与某些行相邻的单元格中添加一个复选框,具体取决于该行包含的内容 我可以在代码中创建复选框之类的组件吗?如果可以,如何创建 欢迎任何回复 虽然@Siva提供的链接肯定是有效的,但我更希望得到关于StackOverflow的答案,而不是外部链接。因此,以下是您可能正在寻找的解决方案: Option Explicit Public Sub tmpSO() Dim i As Long Dim chk

我在Excel文件中添加了一个按钮,当单击该按钮时,它将读取文本文件并用文本文件中的行填充列。我需要在与某些行相邻的单元格中添加一个复选框,具体取决于该行包含的内容

我可以在代码中创建复选框之类的组件吗?如果可以,如何创建


欢迎任何回复

虽然@Siva提供的链接肯定是有效的,但我更希望得到关于StackOverflow的答案,而不是外部链接。因此,以下是您可能正在寻找的解决方案:

Option Explicit

Public Sub tmpSO()

Dim i As Long
Dim chk As CheckBox

With ThisWorkbook.Worksheets(1)
    .CheckBoxes.Delete
    For i = 1 To .Cells(.Rows.Count, "A").End(xlUp).Row
        If .Cells(i, "A").Value2 = "need checkbox" Then
            Set chk = .CheckBoxes.Add(Left:=.Cells(i, "B").Left, Top:=.Cells(i, "B").Top, Width:=.Cells(i, "B").Width, Height:=10)
            chk.OnAction = "runThisSub"
            chk.Name = "CheckBowInRow" & i
            chk.Caption = "CheckBowInRow" & i
        End If
    Next i
End With

End Sub

将两个子模块复制到
模块中
到Excel文件中,并在第一个子模块中进行更改

  • 文本导入到的工作表(此处为
    工作表(1)
  • 可以找到条件的列(此处为列
    A
    ),以及
  • 条件是什么(此处列
    A
    中的值必须是
    need复选框
  • 代码现在将查看工作表
    工作表(1)
    A列中的所有单元格,并检查该值是否为
    need checkbox
    。如果是这样,代码将自动在该单元格旁边的列
    B
    中添加一个复选框


    如果您单击任何新创建的复选框,则第二个子框将启动,并在消息框中显示已单击的行中的复选框。

    我想这就是您所需要的,非常棒,非常感谢!请问“Option Explicit”的作用是什么?
    Option Explicit
    被认为是编码最佳实践。要了解更多信息,请阅读以下内容:并且(如果您希望阅读Microsoft在这方面的想法)
    Sub runThisSub()
    
    MsgBox "You clicked the checkbox " & Application.Caller _
                & Chr(10) & "in cell " & ThisWorkbook.Worksheets(1).CheckBoxes(Application.Caller).TopLeftCell.Address
    
    End Sub