使用单元格值作为范围来隐藏列

我有一个电子表格,有一个checkbox,checkbox的目的是隐藏两个相邻列中的客户端名称。 由于电子表格会不时变化,因此列的位置发生变化,因此现在是P:Q,但一年前它是H:I。

我想将“范围”存储在一个单元格中,并从我的vba引用,并隐藏列。 该checkbox是一个简单的切换。 我已经尝试了各种化身,没有成功,我最近的努力告诉我,我没有适当的范围。 我使用的范围是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 

这是在一张表内:

 Sub qwerty() My_range = Cells(4, 6).Value Range(My_range).EntireColumn.Hidden = True End Sub 

在这里输入图像说明

您的Private Sub CheckBox2_Click应该在工作表的代码表。 我相信这是由Sheet9工作表.CodeName属性标识的工作表。

工作表代码片中的Private Sub不必在任何Range对象或Range.Cells对象上显式引用.Parent工作表属性,除非要引用另一个工作表的单元格。 无论ActiveSheet属性如何,这些都绑定到工作表上您的代码片上的单元格。

 Private Sub CheckBox2_Click() Range(Cells(4, "F").Text).EntireColumn.Hidden = CBool(Me.Value) End Sub 

不要将工作表的Private Sub行为与模块代码表上的Private Sub混淆。 无论Sub是Public还是Private,模块代码片应始终显式引用父工作表(通常是父工作簿)。

你必须在上下文中使用代码:

 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 

感谢所有回应的人,帮助了很多,使我走上了正轨。 正如你们中的一些人所指出的那样,背景是重要的,而且我正在混合私人的sub和sub,所以当涉及范围的时候有一个范围的问题。 我也从另一个来源有build议使用命名的范围,而不是读取单元格的值,因为列总是相邻的。 我已经发布了下面的代码,以防将来对任何人有价值。

  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