隐藏行的动态范围

时间:2019-04-18 10:48:07

标签: excel vba

我有工作簿,其中有用于隐藏和取消隐藏行的按钮。因此,当隐藏行时,也会隐藏一个按钮,反之亦然。然后,单击按钮时,我应该隐藏和取消隐藏范围。有什么办法可以使这种动态变化吗?

问题是我有40个按钮,对计算器进行一些编辑并将新行添加到工作表后,我必须重写所有范围。范围是按顺序排列的,所以它们像这样:

Range("1254:1275").EntireRow.Hidden = True
Range("1254:1275").EntireRow.Hidden = False
next one
Range("1276:1298").EntireRow.Hidden = True
Range("1276:1298").EntireRow.Hidden = False
next one
Range("1299:1350").EntireRow.Hidden = True
Range("1299:1350").EntireRow.Hidden = False
etc.

是否有可能像+22这样的东西代替1254:1275?然后用+23代替1276:1298等?

对于40个按钮,我有80个潜水艇(1个用于隐藏,1个用于取消隐藏)。每个操作都在自己的子目录中,如下所示:

隐藏按钮:

Sub WorkshopWork_HideMe()

Application.ScreenUpdating = False
ThisWorkbook.Sheets("Price calculation").Unprotect Password:="123"
Range("1254:1275").EntireRow.Hidden = True
ActiveSheet.Shapes("Rectangle: Rounded Corners 111").Visible = True
ActiveSheet.Shapes("Rectangle: Rounded Corners 233").Visible = False
ThisWorkbook.Sheets("Price calculation").Protect Password:="123"
Application.ScreenUpdating = True

End Sub

取消隐藏按钮:

Sub WorkshopwnWork_UnhideMe()

Application.ScreenUpdating = False
ThisWorkbook.Sheets("Price calculation").Unprotect Password:="123"
Range("1254:1275").EntireRow.Hidden = False
ActiveSheet.Shapes("Rectangle: Rounded Corners 111").Visible = False
ActiveSheet.Shapes("Rectangle: Rounded Corners 233").Visible = True

ActiveWindow.ScrollRow = 1254
ThisWorkbook.Sheets("Price calculation").Protect Password:="123"
Application.ScreenUpdating = True

End Sub

4 个答案:

答案 0 :(得分:2)

是的,您可以做类似的事情来使rows index 动态

Dim startRow As Integer

startRow = 1200
Range(startRow + 54 & ":" & startRow + 75).EntireRow.Hidden = True
Range(startRow + 54 & ":" & startRow + 75).EntireRow.Hidden = False

您可以将变量声明为Public Constant,并且变量会在您的所有functions中使用它:

'This goes at the start of a Module, outside any Sub or Function
Public Const startRow As Integer = 1200

'Example Button1
Sub mySubButton1()
    Range(startRow + 54 & ":" & startRow + 75).EntireRow.Hidden = True
    Range(startRow + 54 & ":" & startRow + 75).EntireRow.Hidden = False
End Sub

'Example Button2
Sub mySubButton2()
    Range(startRow + 100 & ":" & startRow + 125).EntireRow.Hidden = True
    Range(startRow + 100 & ":" & startRow + 125).EntireRow.Hidden = False
End Sub

希望这会有所帮助。

答案 1 :(得分:2)

尝试使用Application.Caller

Sub btnS()

Set wsAuth = ThisWorkbook.Worksheets("Data")
    ColumnNr = wsAuth.Buttons(Application.Caller).TopLeftCell.Column
    RowNr = wsAuth.Buttons(Application.Caller).TopLeftCell.Row
    Range(RowNr + 54 & ":" & RowNr + 75).EntireRow.Hidden = True


End Sub

答案 2 :(得分:1)

您可以尝试:

<div class="tagclmn">
    <div class="veranstaltung" style="top: 200px; height: 200px; background-color: red;">
        <div class="container">
            <div class="title">Testvorlesung</div>
            <div class="time">10:00 - 12:00 st</div>
            <div class="place">W.11.010</div>
        </div>
    </div>
    <div class="veranstaltung" style="top: 400px; height: 200px; background-color: green; width:50%;">
        <div class="container">
            <div class="title">Testvorlesung 2</div>
            <div class="time">12:00 - 14:00 st</div>
            <div class="place">W.11.010</div>
        </div>
    </div>
    <div class="veranstaltung" style="top: 400px; height: 200px; background-color: blue;width:50%; left:50%">
        <div class="container">
            <div class="title">Testvorlesung 3</div>
            <div class="time">12:00 - 14:00 st</div>
            <div class="place">W.11.003</div>
        </div>
    </div>
</div>

答案 3 :(得分:1)

我将创建并维护一个命名范围,该范围会随您的需求而变化。如果要切换整行的显示,只需在第一列中包含单元格即可。

enter image description here

从那里,您可以在代码中包含该范围,您可以在下面例程的Range调用中看到它。如果随后插入或删除行,则命名范围的形状会自动调整。

您还可以改善例程以接受布尔值进行显示,然后从代理例程中对其进行处理以进行隐藏和显示。

Sub WorkshopWork_HideMe()
    ToggleHideShow False
End Sub

Sub WorkshopWork_ShowMe()
    ToggleHideShow True
End Sub

Private Sub ToggleHideShow(ByVal bShow As Boolean)
    Application.ScreenUpdating = False

    ThisWorkbook.Sheets("Price calculation").Unprotect Password:="123"

    Range("ShowHideRange").EntireRow.Hidden = Not bShow

    ActiveSheet.Shapes("Rectangle: Rounded Corners 111").Visible = bShow
    ActiveSheet.Shapes("Rectangle: Rounded Corners 233").Visible = Not bShow

    ThisWorkbook.Sheets("Price calculation").Protect Password:="123"

    Application.ScreenUpdating = True
End Sub

反正要考虑的事情。