繁体   English   中英

excel 2010 中隐藏行的宏

[英]macro for Hide rows in excel 2010

我对 VBA 中的编程有点陌生。 我在互联网上阅读了一些东西,但我找不到我需要的东西或无法让它工作。 我的问题:

在 B6 单元格的工作表“工作表 1”中,给出了一个项目将被开发的年限。

在工作表“表 2”和“表 3”中,我制作了一个 50 年的电子表格(第 1 年到第 50 年;第 7 行到第 56 行)。

在“工作表 1”的单元格 b6 中,我想输入一个介于 1 和 50 之间的值。当值为 49 时,我想隐藏“工作表 2”和“工作表 3”中的第 56 行。 当值为 48 时,我想在“sheet2”和“sheet 3”中隐藏第 55:56 行,依此类推。 这是我到目前为止得到的,但是当我更改单元格 B6 中的值时,我无法让它自动工作:

Sub test1()
    If Range("sheet1!B6") = 50 Then
    Rows("52:55").EntireRow.Hidden = False
    Else
    If Range("sheet1!B6") = 49 Then
    Rows("55").EntireRow.Hidden = True
    Else
    If Range("sheet1!B6") = 48 Then
    Rows("54:55").EntireRow.Hidden = True
    
    End If: End If: End If:
    
    End Sub

我希望有人可以帮助我解决我的问题。

谢谢

你几乎明白了。 您正在隐藏活动工作表中的行。 没关系。 但更好的方法是在它所在的位置添加。

Rows("52:55").EntireRow.Hidden = False

变成

activesheet.Rows("52:55").EntireRow.Hidden = False

没有它,我会发生奇怪的事情。 至于让它自动化。 您需要在 VBA 编辑器中的工作表宏中使用 worksheet_change 事件(不是模块,双击编辑器最左侧的 sheet1。)在该工作表中,使用编辑器本身上方的下拉菜单(应该有2 个列表框)。 左侧的列表框将包含您要查找的事件。 之后只需放入宏。 它应该看起来像下面的代码,

Private Sub Worksheet_Change(ByVal Target As Range)
test1
end Sub

而已。 每当您更改某些内容时,它都会运行宏 test1。

好吧,你走在正确的道路上,班诺!

有一些关于 VBA 编程的提示可能会对您有所帮助。

  1. 始终使用对要与之交互的工作表的显式引用。 否则,Excel 可能会“假设”您的代码适用于活动工作表,最终您会看到它搞砸了您的电子表格。

  2. 正如 lionz 所提到的,与 Excel 提供的本地方法取得联系。 您可能会在大多数技巧中使用它们。

  3. 显式声明您的变量...它们将显示每个 object 在 VBA 中提供的方法列表。 它可能会节省您在互联网上挖掘的时间。

现在,让我们有一个草稿代码...

请记住,此代码必须在 Excel 表 object 内,如 lionz 所述。 它仅适用于 Sheet 2,由您以您喜欢的方式使其适应 Sheet 2 和 Sheet 3。

希望能帮助到你!

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim oSheet As Excel.Worksheet

    'We only want to do something if the changed cell is B6, right?
    If Target.Address = "$B$6" Then

        'Checks if it's a number...
        If IsNumeric(Target.Value) Then

            'Let's avoid values out of your bonds, correct?
            If Target.Value > 0 And Target.Value < 51 Then

                'Let's assign the worksheet we'll show / hide rows to one variable and then
                '   use only the reference to the variable itself instead of the sheet name.
                '   It's safer.

                'You can alternatively replace 'sheet 2' by 2 (without quotes) which will represent
                '   the sheet index within the workbook
                Set oSheet = ActiveWorkbook.Sheets("Sheet 2")

                'We'll unhide before hide, to ensure we hide the correct ones
                oSheet.Range("A7:A56").EntireRow.Hidden = False

                oSheet.Range("A" & Target.Value + 7 & ":A56").EntireRow.Hidden = True

            End If

        End If

    End If

End Sub

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM