我有一个电子表格,其中有一个复选框,复选框的目的是隐藏两个相邻列中的客户端名称。因为电子表格会不时地改变,所以列的位置会发生变化,因此它目前是P:Q但是一年前它是H:I。
我想将'range'存储在一个单元格中并从我的vba中引用它并获取它以隐藏列。该复选框是一个简单的切换。我尝试了各种各样的化身没有成功,我的最新努力告诉我,我没有正确地确定范围。我用于teh系列的cel是F4。该代码目前是:
Private Sub CheckBox2_Click()
Dim c As Range
Dim Visy As Integer
Dim My_range As String
'My_range is the range of filled rows stored as a range in cell F4
'Visy stores the state of the checkbox
If CheckBox2.Value = True Then
Visy = 1
Else
Visy = 0
End If
'Stop any use of the spread sheet and set variable initial states
Application.EnableEvents = False
My_range = Sheet9.Cells(4, 6).Value
'Hide the columns
Range(My_range).Hidden = Visy
'Sheet9.colums(My_range).Hidden = True
'Re enable application
On Error GoTo 0
Application.EnableEvents = True
End Sub
答案 0 :(得分:0)
答案 1 :(得分:0)
您必须在上下文中使用代码:
Private Sub CheckBox2_Click()
Dim wsh As Worksheet
Dim sRangeName As String
'context!
Set wsh = ThisWorkbook.Worksheets("TypeNameHere")
sRangeName = wsh.Range("F4")
wsh.Range(sRangeName).EntireColumn.Hidden = CheckBox2.Value
Set wsh = Nothing
End Sub
答案 2 :(得分:0)
您的Private Sub CheckBox2_Click
应该在工作表的代码表中。我相信这是Sheet9工作表.CodeName属性确定的工作表。
工作表代码表中的私有子代不必明确引用任何.Parent上的Range object工作表属性或 Range.Cells对象,除非您想引用其他工作表的单元格。它们绑定到工作表上的单元格,无论ActiveSheet property是什么,
都会显示您所在的代码表Private Sub CheckBox2_Click()
Range(Cells(4, "F").Text).EntireColumn.Hidden = CBool(Me.Value)
End Sub
请勿将工作表的Private Sub行为与模块代码表上的Private Sub混淆。无论Sub是Public还是Private,模块代码表都应该始终显式引用父工作表(通常是父工作簿)。
答案 3 :(得分:0)
感谢所有回复的人,他帮了很多忙,让我走上正轨。正如你们中的一些人所指出的那样,上下文很重要,而且我正在混合私有子和sub,因此在范围方面存在范围问题。我也从另一个来源建议使用命名范围而不是读取单元格值,因为列总是相邻的。我已经发布了以下代码,以防将来对任何人都有价值。
Private Sub CheckBox2_Click()
'Requires ClientNameCol to be set to the range to be hidden
Dim Visy As Boolean
'Stop any use of the spread sheet and set variable initial states
Application.EnableEvents = False
'Check if sheet is to be hidden or not
If Worksheets("Client 16").CheckBox2.Value = True Then
Visy = True
Else
Visy = False
End If
'Hide/unhide the columns
With ThisWorkbook
.Worksheets("Client 16").Range("ClientNameCol").EntireColumn.Hidden = Visy
End With
On Error GoTo 0
Application.EnableEvents = True
End Sub