[英]VBA hide unhide rows based on user number entry
我想編寫一個宏,該宏根據用戶輸入來隱藏和隱藏列。 如果用戶在定義的字段中輸入“ 3”,則應取消隱藏,例如3列,依此類推...
如果我對Rows進行處理,這是可以正常工作的代碼。 但是對於列,它不起作用。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$2" Then
Range("G:L").EntireColumns.Hidden = True
Dim i As Integer
Dim imax As Integer
Dim str1 As String
Dim str2 As String
imax = 5
If Range("C2").Value > 0 And Range("C2") <= imax Then
i = Range("C2").Value
str1 = "7:" & 7 + i
str2 = 7 + i & ":12"
Range(str1).EntireColumn.Hidden = True
Range(str2).EntireColumn.Hidden = True
End If
End If
End Sub
也許您可以嘗試這樣做( 最后一個代碼應該是您嘗試的 ):
Sub tryme()
Dim MyRng As Range
Set MyRng = Columns("C:D")
MyRng.Hidden = True
End Sub
在您的情況下,如果要隱藏帶有列號而不是字母的列,則應執行以下操作:
Sub Worksheet_SelectionChange()
Dim MyRng As Range
Dim ColumnsToHide1 As Integer
Dim ColumnsToHide2 As Integer
ColumnsToHide1 = 1
ColumnsToHide2 = 5
Set MyRng = Range(Columns(ColumnsToHide1), Columns(ColumnsToHide2))
MyRng.Hidden = True
End Sub
因此,也許您的代碼是這樣的: 嘗試一下 :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$2" Then
Range("G:L").EntireColumns.Hidden = True
Dim i As Integer
Dim imax As Integer
Dim str1 As Integer
Dim str11 As Integer
Dim str2 As Integer
Dim str22 As Integer
Dim MyRng1 As Range
Dim MyRng2 As Range
imax = 5
If Range("C2").Value > 0 And Range("C2") <= imax Then
i = Range("C2").Value
str1 = 7
str11 = 7 + i
str2 = 7 + i
str22 = 12
Range(Columns(str1), Columns(str11)).Hidden = True
Range(Columns(str2), Columns(str22)).Hidden = True
End If
End If
End Sub
如果輸入3,這將隱藏A:C。
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Target.Address = "$C$2" Then
If IsNumeric(Target.Value) Then
Range("A1").Resize(, Target.Value).EntireColumn.Hidden = True
End If
End If
End Sub
謝謝SJR,謝謝Dorian,兩個代碼都非常有效! 但是,由於要隱藏/取消隱藏的列是年份(2018、2019、2020等),我想從第一年開始取消隱藏。 所以我不得不稍微修改一下代碼。 結果如下:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyRng As Range
Dim Hide1 As Integer
Dim Hide2 As Integer
If Target.Address = "$C$2" Then
Hide1 = 7
Hide2 = 14
Set MyRng = Range(Columns(Hide1), Columns(Hide2))
MyRng.Hidden = True
Dim i As Integer
Dim imax As Integer
Dim str1 As Integer
Dim str11 As Integer
Dim str2 As Integer
Dim str22 As Integer
imax = 9
If Range("C2").Value > 0 And Range("C2") <= imax Then
i = Range("C2").Value
str1 = 7
str11 = 7 + i
str2 = 7 + i
str22 = 15
Range(Columns(str1), Columns(str11)).Hidden = False
Range(Columns(str2), Columns(str22)).Hidden = True
End If
End If
End Sub
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.