【发布时间】:2016-08-23 19:58:08
【问题描述】:
我在 Excel 文件中添加了一个按钮,单击该按钮时,将读取文本文件并使用文本文件中的行填充一列。我需要在与某些行相邻的单元格中添加一个复选框,具体取决于该行包含的内容。
我可以在代码中创建像复选框这样的组件吗?如果可以,如何创建?
感谢任何回复。
【问题讨论】:
-
我想这就是你需要的analysistabs.com/vba/…
我在 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
Sub runThisSub()
MsgBox "You clicked the checkbox " & Application.Caller _
& Chr(10) & "in cell " & ThisWorkbook.Worksheets(1).CheckBoxes(Application.Caller).TopLeftCell.Address
End Sub
将两个 sub 复制到您的 Excel 文件中的 Module 并在第一个 sub 中进行更改
Worksheet(1)),A),以及A列中的值必须是need checkbox)。代码现在将查看工作表Worksheet(1) 中A 列中的所有单元格,并检查值是否为need checkbox。如果是这样,代码将自动在与该单元格相邻的列B 中添加一个复选框。
如果您单击任何新创建的复选框,则第二个子程序会启动,并会在消息框中显示您单击了哪一行中的哪个复选框。
【讨论】:
Option Explicit 被认为是编码最佳实践。欲了解更多信息,请阅读:stackoverflow.com/documentation/excel-vba/1107/… 以及(如果您想阅读微软对此的想法)msdn.microsoft.com/en-us/library/y9341s4f.aspx