excel 根据Worksheet_Change事件处理隐藏/取消隐藏行

dfuffjeb  于 2023-08-08  发布在  其他
关注(0)|答案(2)|浏览(93)
If Range("B5") = ("Consult Fee 549") Or Range("B6") = "Consult Fee 632" Then
    Range("A1").EntireRow.Hidden = False
Else
    Range("A1").EntireRow.Hidden = True
End If

字符串
上面运行良好。
如果我将“Consult Fee 549”更改为名称管理器中定义的变量:咨询费1

If Range("B5") = ("Consult_Fee_1") Or Range("B6") = "Consult_Fee_2" Then


则它将不适用于(“B5”)=(“Consult_Fee_1”),但仍适用于(“B6”)=“Consult_Fee_2”
是否可以将变量与Range()一起使用?

xytpbqjk

xytpbqjk1#

工作表变更:至少有一个字符串对相等时显示行

  • 假定Consult_Fee_1Consult_Fee_2是工作簿范围的名称,它们引用位于工作簿中任意位置的单个单元格。
Private Sub Worksheet_Change(ByVal Target As Range)
    
    Const DST_TARGET_CELLS As String = "B5,B6"
    Const DST_HIDE_SHOW_ROW As Long = 1
    Dim CompareNames():
    CompareNames = VBA.Array("Consult_Fee_1", "Consult_Fee_2")
    
    Dim drg As Range: Set drg = Me.Range(DST_TARGET_CELLS)
    If Intersect(drg, Target) Is Nothing Then Exit Sub ' no cells changed
    
    Dim wb As Workbook: Set wb = Me.Parent ' or Set wb = ThisWorkbook
    
    Dim sCell As Range, dCell As Range, n As Long
    Dim sStr As String, dStr As String, IsEqual As Boolean
    
    For n = 1 To drg.Cells.Count
        
        Set sCell = wb.Names(CompareNames(n - 1)).RefersToRange
        Set dCell = drg.Cells(n)
        
        sStr = CStr(sCell.Value)
        dStr = CStr(dCell.Value)
        
        If StrComp(sStr, dStr, vbTextCompare) = 0 Then ' is equal
            IsEqual = True
            Exit For ' no need to loop anymore
        End If
    
    Next n
    
    With Me.Rows(DST_HIDE_SHOW_ROW)
        If .Hidden = IsEqual Then .Hidden = Not IsEqual
        ' i.e.
'        If IsEqual Then
'            ' No need to unhide if it's already not hidden.
'            If .Hidden Then .Hidden = False
'        Else
'            ' No need to hide if it's already hidden.
'            If Not .Hidden Then .Hidden = True
'        End If
    End With

End Sub

字符串

j8ag8udp

j8ag8udp2#

这不是一个全面的审查,而是一个具体的一个你的问题。
Excel中的定义名称与变量之间存在差异。
定义的名称是工作表左上角或“公式”选项卡“名称管理器”中的范围标识符。它可以被用来做这样的事情

var1 = Range("defined_name1")

字符串
变量也可用于实现Range对象的参数,如下所示

defined_name2 = "A1:B6"
var1 = Range(defined_name2)


但这两个标识符并不相同。第一个是Excel参数,可在VBA中访问,例如通过工作簿的Names(i).Value属性。
第二个是VBA Variant变数,用于表示式中。

相关问题