我有工作簿,其中有用于隐藏和取消隐藏行的按钮。因此,当隐藏行时,也会隐藏一个按钮,反之亦然。然后,单击按钮时,我应该隐藏和取消隐藏范围。有什么办法可以使这种动态变化吗?
问题是我有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
答案 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)
我将创建并维护一个命名范围,该范围会随您的需求而变化。如果要切换整行的显示,只需在第一列中包含单元格即可。
从那里,您可以在代码中包含该范围,您可以在下面例程的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
反正要考虑的事情。