vba - Excel VBA + 用户表单复选框 :: 使用表单复选框隐藏/取消隐藏列
问题描述
我希望有人能够帮助我解决我遇到的问题。让我首先说我不是 VBA 方面的佼佼者,我是新手。
问题
我正在尝试创建一个带有复选框(13 个复选框)的简单用户表单,这将允许用户隐藏/取消隐藏他们选择的列。我有70列从 S 到 BR。我知道,这听起来可能很多,但这是必要的。我有13 个时期,每个 时期有 4 列IE期间 1 有列 **S:V。**
我无法做到的是,让用户窗体上的复选框隐藏/取消隐藏用户选择的时段。我试过的代码。我遵循了许多教程,但无法让它正常工作。我不确定这是否有意义,但我已经添加了所有我希望它能够工作的代码。
我还添加了列的图像,以便您更好地理解......我希望
我希望有人可以在这件事上为我提供帮助,因为我得到这个工作是至关重要的。非常感谢您提前。
IMAGE HERE (BEST OPEN IN NEW TAB)这些栏目一直到 PERIOD 13 或 WEEK 52
Sub hideCol(C As Integer)
If Controls("CheckBox" & C ) = True Then
Columns(C).Hidden = True
Else
Columns(C).Hidden = False
End If
ActiveWindow.ScrollColumn = 1
End Sub
Private Sub CheckBox1_Clickl()
Dim C As Integer
C = (19, 20, 21, 22)
Call hideCol(C)
End Sub
Private Sub CheckBox2_Click()
Dim C As Integer
C = (23, 24, 25, 26)
Call hideCol(C)
End Sub
Private Sub CheckBox3_Click()
Dim C As Integer
C = (27, 28, 29, 30)
Call hideCol(C)
End Sub
Private Sub CheckBox4_Click()
Dim C As Integer
C = (31, 32, 33, 34)
Call hideCol(C)
End Sub
Private Sub CheckBox5_Click()
Dim C As Integer
C = (35, 36, 37, 38)
Call hideCol(C)
End Sub
Private Sub CheckBox6_Click()
Dim C As Integer
C = (39, 40, 41, 42)
Call hideCol(C)
End Sub
Private Sub CheckBox7_Click()
Dim C As Integer
C = (43, 44, 45, 46)
Call hideCol(C)
End Sub
Private Sub CheckBox8_Click()
Dim C As Integer
C = (47, 48, 49, 50)
Call hideCol(C)
End Sub
Private Sub CheckBox9_Click()
Dim C As Integer
C = (51, 52, 53, 54)
Call hideCol(C)
End Sub
Private Sub CheckBox10_Click()
Dim C As Integer
C = (55, 56, 57, 58)
Call hideCol(C)
End Sub
Private Sub CheckBox11_Click()
Dim C As Integer
C = (59, 60, 61, 62)
Call hideCol(C)
End Sub
Private Sub CheckBox12_Click()
Dim C As Integer
C = (63, 64, 65, 66)
Call hideCol(C)
End Sub
Private Sub CheckBox13_Click()
Dim C As Integer
C = (67, 68, 69, 70)
Call hideCol(C)
End Sub
Private Sub UserForm_Initialize ()
Dim i As Integer
For i = 19 to 70
Controls("CheckBox" & i).caption = Cells(5, i)
If Columns(i).Hidden = True Then
Controls("CheckBox" & i).Value = True
End If
Next i
End Sub
'This is supposed to get the name of the column I.e Period 1, period 2, period 3 and title it in the checkboxes accordingly. Not working though :( :( :( :(
添加
每当我尝试运行它时。我得到“运行时错误'-2147024808(80070057)':找不到指定的对象。
再次,非常感谢您提供的任何帮助。我一直试图让这个工作几天,但无法弄清楚。如果所有代码都完全错误,我不会感到惊讶:/。
解决方案
我可以通过更改代码来实现您的目标。
我没有将列设置为变量 C,然后调用子例程来隐藏设置为 C 的列,而是编写了CheckBox_click
事件来隐藏/取消隐藏列。
例如,我已将此代码分配给CheckBox1
on UserForm1
;
Private Sub CheckBox1_Click()
If Me.CheckBox1.Value = True Then
Sheets(1).Columns("D:G").Hidden = True
ElseIf Me.CheckBox1.Value = False Then
Sheets(1).Columns("D:G").Hidden = False
End If
End Sub
基本上这就是说,每次单击CheckBox1
on时UserForm1
,确定复选框的值是 nowTrue
还是False
。如果True
,隐藏 D、E、F 和 G 列,否则False
,取消隐藏列。
如果这是您要查找的内容,只需将代码添加到每个 CheckBox_click 事件并更改您的控件名称以适应例如CheckBox2
等CheckBox3
)。
记住您在用户窗体中的选择
当工作簿关闭或UserForm
从内存中卸载时,您的选择将被“忘记”。但是您的列仅在单击时隐藏/取消隐藏CheckBox
。这意味着当随后打开工作簿和/或加载用户窗体时,所有复选框将在初始化时显示它们的值(默认为 False)。
注意:当用户窗体从内存中卸载时,所有变量都被遗忘,因此我们不能使用 VBA 来记住我们的选择以备下次使用。
因此,我们可以“记住”我们的选择的一种方法有以下 3 个步骤:
- 在我们的电子表格上放置一个 ActiveX
CheckBox
(我们将使用 sheet1 作为示例)。 - 在
CheckBox_click
代码中,在我们的代码中添加一个新行,将用户表单复选框中的匹配值分配给我们的 WorksheetCheckBox
。 在
UserForm_Initialization
代码中,将 Worksheet 的值设置CheckBox
为UserForm
CheckBox
.步骤1
在您的工作簿中,选择相关工作表,转到“开发人员选项卡”,单击“插入”并选择复选框。
然后将它“绘制”CheckBox
到您想要放置的任何位置(就像您在 VBE 中为您所做的那样UserForm
。
第2步
将以下代码行添加到CheckBox_click
代码中:
Private Sub CheckBox1_Click()
If Me.CheckBox1.Value = True Then
Sheets(1).Columns("D:G").Hidden = True
Sheet1.CheckBox1.Value = True '<~~ HERE
ElseIf Me.CheckBox1.Value = False Then
Sheets(1).Columns("D:G").Hidden = False
Sheet1.CheckBox1.Value = False '<~~ AND HERE
End If
End Sub
第 3 步
在我们的Userform1
代码中,输入以下内容:
Private Sub UserForm_Initialize()
Me.CheckBox1.Value = Sheet1.CheckBox1.Value
End Sub
推荐阅读
- amazon-web-services - 如何使用 Sagemaker 中经过训练的图像分类模型对通过网页上传的图像进行推理?
- javascript - JavaScript 中不匹配的相同字符串
- python - 如何将图像数据集加载到 TensorFlow 中?
- python - 错误:无法在烧瓶中导入“file_name”
- json - 我将如何在 Dart 中为颤振项目访问此 JSON 数据?
- c++ - Asio 独立 async_connect 连接后不调用回调
- ios - 在 iOS 13.4 中,嵌套 ForEach 中的 SwiftUI ObservedObject 不再像 iOS 13.3 中那样更新 View
- sql - Select with Row_Number using join. Fetching last three customers with their respective addresses
- javascript - 试图测试一个不和谐的机器人;macOS 终端不断出现错误
- mysql - 并排的两个查询 - 共同的月/年(MYSQL)