首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >以前的行动仍在继续

以前的行动仍在继续
EN

Stack Overflow用户
提问于 2022-01-29 16:02:13
回答 3查看 67关注 0票数 2

我试图做一个用户输入,其中有两个输入单元格A1和单元格B1。对于单元格A1的操作,我的代码如下:

代码语言:javascript
复制
If target.Address = "$A$1" Then
        Select Case Sheets("Input").Range("A1")
            Case "Hide1"
                Range("A3:A5").EntireRow.Hidden = True
            Case "Hide2"
                Range("A7:A9").EntireRow.Hidden = True
     End Select
End If

对于单元格A2的操作,我的代码如下:

代码语言:javascript
复制
If target.Address = "$A$2" Then
        Select Case Sheets("Input").Range("A2")
            Case "Hide3"
                Range("A11:A13").EntireRow.Hidden = True
            Case "Hide4"
                Range("A15:A17").EntireRow.Hidden = True
     End Select
End If

如何确保在更改A1之后,即使在更改A2之后,操作(隐藏的行)仍会继续?例如,我将A1更改为“隐藏1",第3-5行被隐藏。接下来,我将A2更改为“隐藏3",希望11-13行隐藏,而第3-5行继续隐藏。

EN

回答 3

Stack Overflow用户

发布于 2022-01-29 16:49:37

我看不出有什么问题。在将A1更改为"Hide1“并将A2更改为"Hide3”后,第3-5行将保持隐藏状态。看一看代码的另一部分。我可以想象,您的代码可能处于SelectionChange事件中,而它应该处于更改事件中:

代码语言:javascript
复制
    Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Address = "$A$1" Then
        Select Case Sheets("Input").Range("A1")
            Case "Hide1"
                Range("A3:A5").EntireRow.Hidden = True
            Case "Hide2"
                Range("A7:A9").EntireRow.Hidden = True
            Case Else
                Range("A3:A5").EntireRow.Hidden = False
                Range("A7:A9").EntireRow.Hidden = False
        End Select
    Else
        If Target.Address = "$A$2" Then
            Select Case Sheets("Input").Range("A2")
                Case "Hide3"
                    Range("A11:A13").EntireRow.Hidden = True
                Case "Hide4"
                    Range("A15:A17").EntireRow.Hidden = True
                Case Else
                    Range("A11:A13").EntireRow.Hidden = False
                    Range("A15:A17").EntireRow.Hidden = False
            End Select
        End If
    End If
    End Sub
票数 0
EN

Stack Overflow用户

发布于 2022-01-29 17:00:03

试试这个:

代码语言:javascript
复制
If target.Address = "$A$1" Then
    Select Case Sheets("Input").Range("A1")
    Case "Hide1"
        Application.EnableEvents=False
        Range("A3:A5").EntireRow.Hidden = True
        Application.EnableEvents=True
    Case "Hide2"
        Application.EnableEvents==False
        Range("A7:A9").EntireRow.Hidden = True
        Application.EnableEvents=True
    End Select
End If
票数 0
EN

Stack Overflow用户

发布于 2022-01-29 18:31:50

工作表更改:隐藏行

  • 在一个工作表中发生了这种情况。代码需要复制到其模块中,例如,Input...etc.
  • This将监视单元格A1 (值"Hide1“和"Hide2")和A2 (值"Hide3”和"Hide4")中的变化,并且在任何时候,所有四个‘行集’中只有一个会被隐藏。如果两个单元格都被更改,则只有第一个单元格的行将被隐藏(参见Exit For).
  • Although的范围(urg)表示整个行,.EntireRow在隐藏时仍然是必要的。

代码语言:javascript
复制
Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim sAddresses As Variant: sAddresses = VBA.Array("A1", "A2")
    Dim uVals As Variant: uVals = VBA.Array("Hide1", "Hide2", "Hide3", "Hide4")
    Dim urg As Range: Set urg = Range("3:5,7:9,11:13,15:17")
    
    Dim sCell As Range
    Dim iCell As Range
    
    Dim n As Long
    
    For n = 0 To UBound(sAddresses)
        Set sCell = Range(sAddresses(n))
        Set iCell = Intersect(sCell, Target)
        If Not iCell Is Nothing Then
            urg.EntireRow.Hidden = False ' unhide all 'row sets'
            Select Case LCase(iCell.Value)
            Case LCase(uVals(n * 2))
                urg.Areas(n * 2 + 1).EntireRow.Hidden = True
            Case LCase(uVals(n * 2 + 1))
                urg.Areas(n * 2 + 2).EntireRow.Hidden = True
            End Select
            ' If both cells are changed, only the first cell's rows get hidden
            Exit For
        End If
    Next n

End Sub
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70907233

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档