2017-05-25 62 views
1

VBA的新手,并尝试创建一个代码,以基于表单1(F4)中单元格的值隐藏/取消隐藏工作表2上的行(名为Charge Codes)(值0 -10)。我目前正在使用下面的代码,它通过单元格F23工作,但过程太长。我需要复制这个细胞F4:F53,每个F细胞有不同的相应的10行的集合,以隐藏/取消隐藏表2。任何人都可以帮我编译这个?这是我使用F4的例子:隐藏/取消隐藏行 - 程序太长

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Address = ("$F$4") And Target.Value = "0" Then Sheets(“Charge Codes”).Rows("3:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "1" Then Sheets(“Charge Codes”).Rows("3").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("4:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "2" Then Sheets(“Charge Codes”).Rows("3:4").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("5:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "3" Then Sheets(“Charge Codes”).Rows("3:5").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("6:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "4" Then Sheets(“Charge Codes”).Rows("3:6").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("7:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "5" Then Sheets(“Charge Codes”).Rows("3:7").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("8:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "6" Then Sheets(“Charge Codes”).Rows("3:8").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("9:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "7" Then Sheets(“Charge Codes”).Rows("3:9").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("10:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "8" Then Sheets(“Charge Codes”).Rows("3:10").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("11:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "9" Then Sheets(“Charge Codes”).Rows("3:11").EntireRow.Hidden = False: Sheets(“Charge Codes”).Rows("12:12").Hidden = True 

If Target.Address = ("$F$4") And Target.Value = "10" Then Sheets(“Charge Codes”).Rows("3:12").EntireRow.Hidden = False 

End Sub 
+0

这是对工作表( “费用代码”)代码表?即工作表上的** **目标**(“收费代码”)? – Jeeped

回答

1

如果我得到了我的基本的数学纠正这应该把你隐藏的行群体的照顾。

Option Explicit 

Private Sub Worksheet_Change(ByVal Target As Range) 

    If Target.Address = "$F$4" Then 
     Worksheets("Charge Codes").Cells(3, 1).Resize(10, 1).EntireRow.Hidden = False 
     Select Case Target.Value 
      Case 0, 10 
       Worksheets("Charge Codes").Cells(3, 1).Resize(10, 1).EntireRow.Hidden = True 
      Case 1, 2, 3, 4, 5, 6, 7, 8, 9 
       Worksheets("Charge Codes").Cells(3, 1).Resize(Target.Value, 1).EntireRow.Hidden = True 
      Case Else 
       'do nothing 
     End Select 
    End If 

End Sub 
1

它使用嵌套IFS:

Private Sub Worksheet_Change(ByVal Target As Range) 

If Target.Address = ("$F$4") Then 

    If Target.Value <> 0 Then 
     Sheets("Charge Codes").Rows("3:12").Hidden = True 
    ElseIf Target.Value = 10 Then 
     Sheets("Charge Codes").Rows("3:12").Hidden = False 
    Else 
     Sheets("Charge Codes").Rows(3 + Target.Value & ":12").Hidden = True 
     Sheets("Charge Codes").Rows("3:" & 2 + Target.Value).Hidden = False 
    End If 

End Sub 
0

只需使用一个逻辑找到行号隐藏

If Target.Address = ("$F$4") Then 
Sheets("Charge Codes").Rows(3 & ":" & CDbl(Target.Value) + (CDbl(Target.Value) - 3)).EntireRow.Hidden = False: _ 
Sheets("Charge Codes").Rows(12 - CDbl(Target.Value) & ":" & 12).EntireRow.Hidden = True 
End If 
+0

当目标值小于2时,它会报错,因为它会返回一个负值的行。 –

+0

是的你是对的,这只是一个示例,行数必须根据必须应用的逻辑进行修改,例如需要选择的起始行数和行数。 –