Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
VBA-基于另一行的隐藏/取消隐藏状态隐藏/取消隐藏行_Vba_Excel - Fatal编程技术网

VBA-基于另一行的隐藏/取消隐藏状态隐藏/取消隐藏行

VBA-基于另一行的隐藏/取消隐藏状态隐藏/取消隐藏行,vba,excel,Vba,Excel,我试图编写一些VBA代码,如果另一个特定行被隐藏,它将取消隐藏整行。此宏还基于特定列中的值隐藏一系列行。这方面的工作很好-我有可靠的代码。我无法使我描述的第一个函数工作。应该很容易做到,只是不知道语法。此子例程应在打开工作簿时执行 Private Sub Workbook_Open() Application.ScreenUpdating = False Dim targ As Range Dim msg As Range targ = "DETAILS!B6" msg = "DETAILS

我试图编写一些VBA代码,如果另一个特定行被隐藏,它将取消隐藏整行。此宏还基于特定列中的值隐藏一系列行。这方面的工作很好-我有可靠的代码。我无法使我描述的第一个函数工作。应该很容易做到,只是不知道语法。此子例程应在打开工作簿时执行

Private Sub Workbook_Open()
Application.ScreenUpdating = False

Dim targ As Range
Dim msg As Range

targ = "DETAILS!B6"
msg = "DETAILS!B42"

msg.EntireRow.Hidden = True


With Range("DETAILS!B6:B40")
        .EntireRow.Hidden = False

        For Each cell In Range("DETAILS!B6:B40")
        Select Case cell.Value

        Case Is = 0
        cell.EntireRow.Hidden = True

        End Select
        Next cell
End With


If targ.EntireRow.Hidden = True Then
    msg.EntireRow.Hidden = False
End If

Application.ScreenUpdating = True
End Sub

您需要设置如下所示的变量

Private Sub Workbook_Open()
Application.ScreenUpdating = False

Dim targ As Range
Dim msg As Range

Set targ = "DETAILS!B6"
Set msg = "DETAILS!B42"

msg.EntireRow.Hidden = True


With Range("DETAILS!B6:B40")
    .EntireRow.Hidden = False

    For Each cell In Range("DETAILS!B6:B40")
    Select Case cell.Value

    Case Is = 0
    cell.EntireRow.Hidden = True

    End Select
    Next cell
End With


If targ.EntireRow.Hidden = True Then
    msg.EntireRow.Hidden = False
End If

Application.ScreenUpdating = True
End Sub

您需要设置如下所示的变量

Private Sub Workbook_Open()
Application.ScreenUpdating = False

Dim targ As Range
Dim msg As Range

Set targ = "DETAILS!B6"
Set msg = "DETAILS!B42"

msg.EntireRow.Hidden = True


With Range("DETAILS!B6:B40")
    .EntireRow.Hidden = False

    For Each cell In Range("DETAILS!B6:B40")
    Select Case cell.Value

    Case Is = 0
    cell.EntireRow.Hidden = True

    End Select
    Next cell
End With


If targ.EntireRow.Hidden = True Then
    msg.EntireRow.Hidden = False
End If

Application.ScreenUpdating = True
End Sub

哦!!只需将
Set
放在
target
msg
之前,因为它们是
范围
。声明范围时,必须设置
Set
,即
Set myRng=Range(“A1:A10”)

如果只是
Set targ=“DetailsB6”
不起作用,您可能需要执行
Set targ=Range(“Details!B6”)


仔细想想,如果您是
Dim Targ as Range
,我认为
Set Targ=“Details!B6”
将不起作用。您将其变暗为一个范围,但将其声明为一个字符串。您需要将其设置为一个范围,以便像
target.EntireRow.Hidden
等那样使用它。

哦!只需将
Set
放在
target
msg
之前,因为它们是
范围
。声明范围时,必须设置
Set
,即
Set myRng=Range(“A1:A10”)

如果只是
Set targ=“DetailsB6”
不起作用,您可能需要执行
Set targ=Range(“Details!B6”)


仔细想想,如果您是
Dim Targ as Range
,我认为
Set Targ=“Details!B6”
将不起作用。您将其变暗为一个范围,但将其声明为一个字符串。您需要将其作为一个范围,以便像
target.EntireRow.Hidden等那样使用它。

尽管您可以这样调用范围对象:
Range(“DETAILS!B6:B40”)

在vba中,最好这样称呼它:
Sheets(“DETAILS”).Range(“B6:B40”)

我还修复了一些语法错误:

Private Sub Workbook_Open()
Application.ScreenUpdating = False

Dim targ As Range
Dim msg As Range

Set targ = Sheets("DETAILS").Range("B6")
Set msg = Sheets("DETAILS").Range("B42")

msg.EntireRow.Hidden = True


With Sheets("DETAILS").Range("B6:B40")
        .EntireRow.Hidden = False
End With

For Each cell In Sheets("DETAILS").Range("B6:B40")
    Select Case cell.Value
        Case 0
            cell.EntireRow.Hidden = True
    End Select
Next cell



If targ.EntireRow.Hidden = True Then
    msg.EntireRow.Hidden = False
End If

Application.ScreenUpdating = True
End Sub

尽管您可以这样调用范围对象:
range(“DETAILS!B6:B40”)

在vba中,最好这样称呼它:
Sheets(“DETAILS”).Range(“B6:B40”)

我还修复了一些语法错误:

Private Sub Workbook_Open()
Application.ScreenUpdating = False

Dim targ As Range
Dim msg As Range

Set targ = Sheets("DETAILS").Range("B6")
Set msg = Sheets("DETAILS").Range("B42")

msg.EntireRow.Hidden = True


With Sheets("DETAILS").Range("B6:B40")
        .EntireRow.Hidden = False
End With

For Each cell In Sheets("DETAILS").Range("B6:B40")
    Select Case cell.Value
        Case 0
            cell.EntireRow.Hidden = True
    End Select
Next cell



If targ.EntireRow.Hidden = True Then
    msg.EntireRow.Hidden = False
End If

Application.ScreenUpdating = True
End Sub

你把代码放在哪里了?它应该位于工作簿对象(ThisWorkbook)的私有模块中。这是你的问题是的,代码是有效的,它只是没有在打开时启动?是的,它是
ThisWorkbook
对象。打开工作簿时,出现以下错误:
运行时错误91:Object variable或With block variable not set
。当我点击“调试”时,突出显示的行是
target=“DETAILS!B6”
。可能是我给
targ
变量赋值的值,你把代码放在哪里了?它应该位于工作簿对象(ThisWorkbook)的私有模块中。这是你的问题是的,代码是有效的,它只是没有在打开时启动?是的,它是
ThisWorkbook
对象。打开工作簿时,出现以下错误:
运行时错误91:Object variable或With block variable not set
。当我点击“调试”时,突出显示的行是
target=“DETAILS!B6”
。可能是我分配给
targ
变量的值