excel - 自动复选框项目生成
问题描述
大家好,
我已经被困了一段时间......我希望有人能在这方面启发我。所以,我在这里创建了 4 个列表框(ActiveX),我希望在每个列表框中创建复选框,这样每次我可以通过选择它来隐藏/取消隐藏同一工作簿中的 Excel 工作表。但是,仅工作簿中的选项卡就太多了。此外,这些选项卡有点像Warehouse 1
, Warehouse 2
, Security 1
, Security 2
, 等等。所以在这些数字之前有一个通用名称。
我想知道是否有办法根据选项卡名称自动生成复选框?
例如,如果我1
在仓库列表框下选择,它应该链接到Warehouse 1
工作簿中的选项卡。
任何帮助都会很棒。谢谢!
解决方案
为了实现您的目标,您首先需要对工作listbox
表上的属性进行一些更改。
进入设计模式并右键单击listbox
> 属性。
更改以下属性:
- 'ListStyle'为1 - fmListStyleOption
- 'MultiSelect'为1 - fmMultiSelectMulti
ListStyle 更改会将选项按钮放在每个列表条目的左侧,而 MultiSelect 调整会将选项按钮更改为复选框。
这是一些使用工作表名称填充的示例代码ListBox
- 我假设您的工作表包含ListBox
已命名 "Main"
并且我已命名"Generate CheckBox"
按钮cmdGenerateCheckBox
。
Private Sub cmdGenerateCheckBox_Click()
Dim WorksheetArray() As Variant
Dim WorksheetIndex As Long
Dim ArrayElement As Variant
Dim NumberOfSheets As Long
Dim MainSheet As Object
Set MainSheet = ThisWorkbook.Sheets("Main")
NumberOfSheets = ThisWorkbook.Sheets.Count
ReDim WorksheetArray(1 To NumberOfSheets)
For WorksheetIndex = 1 To UBound(WorksheetArray)
WorksheetArray(WorksheetIndex) = ThisWorkbook.Sheets(WorksheetIndex).Name
Next WorksheetIndex
MainSheet.lstWarehouse.Clear
MainSheet.lstSecurity.Clear
For Each ArrayElement In WorksheetArray()
If ArrayElement Like "Warehouse*" Then
MainSheet.lstWarehouse.AddItem ArrayElement
ElseIf ArrayElement Like "Security*" Then
MainSheet.lstSecurity.AddItem ArrayElement
End If
Next ArrayElement
Dim ListItemCounter As Long
Dim ListItem As Variant
'----------------lstWarehouse ListBox-----------------
ListItemCounter = 0
For Each ListItem In MainSheet.lstWarehouse.List
For Each ArrayElement In WorksheetArray()
If ListItem = ArrayElement Then
If ThisWorkbook.Sheets(ArrayElement).Visible = True Then
MainSheet.lstWarehouse.Selected(ListItemCounter) = True
ElseIf ThisWorkbook.Sheets(ArrayElement).Visible = False Then
MainSheet.lstWarehouse.Selected(ListItemCounter) = False
End If
Else
'Do nothing
End If
Next ArrayElement
ListItemCounter = ListItemCounter + 1
Next ListItem
'----------------lstSecurity ListBox-----------------
ListItemCounter = 0
For Each ListItem In MainSheet.lstSecurity.List
For Each ArrayElement In WorksheetArray()
If ListItem = ArrayElement Then
If ThisWorkbook.Sheets(ArrayElement).Visible = True Then
MainSheet.lstSecurity.Selected(ListItemCounter) = True
ElseIf ThisWorkbook.Sheets(ArrayElement).Visible = False Then
MainSheet.lstSecurity.Selected(ListItemCounter) = False
End If
Else
'Do nothing
End If
Next ArrayElement
ListItemCounter = ListItemCounter + 1
Next ListItem
End Sub
推荐阅读
- session - 未在 Edge 上设置会话 cookie(点网核心)
- java - 来自android studio的应用程序在我的手机上不断崩溃
- jenkins - “仅在 SCM 更改时构建”在 jenkins 作业中设置为 true,但不使用最新提交构建
- c# - 将元组传递给 ObjectDataProvider 参数
- r - 从 R 中的数据框列表中删除特定的数据框
- python - AttributeError:'float' 对象在 pandas 中没有属性'split'
- javascript - 前馈神经网络的输出接近 0
- docker - docker-compose 只读绑定卷合并
- audit.net - 在我的应用程序的“Startup.cs”中注册 Audit.Net 的第一步是什么?
- c# - C# WebClient - 非常简单的将 json 发布到 PHP 服务器