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

时间:2016-06-05 20:18:56

标签: excel vba excel-vba

我有一个电子表格,其中有一个复选框,复选框的目的是隐藏两个相邻列中的客户端名称。因为电子表格会不时地改变,所以列的位置会发生变化,因此它目前是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

4 个答案:

答案 0 :(得分:0)

这是在表中:

echo "anything \n whatever";

enter image description here

答案 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