#VBA - Private Sub Worksheet_Change Error: Method 'Hidden' of Object 'Range' Field
#VBA - Private Sub Worksheet_Change Error: Method 'Hidden' of Object 'Range' Field
花了 3 个多小时试图解决这个问题。任何帮助,将不胜感激。我在底部尝试过的解决方案。
问题:
我正在尝试更新代码,以便如果有人在单元格 E58 中选择“NA”(此单元格上有 3 个下拉选项:Yes/No/NA),它会更新单元格 E60 的值和 E65 也是 NA,而不会中断当前的操作。我尝试过的每个解决方案都会导致代码循环回到顶部并在从顶部开始的第 6 行失败 and/or 导致文件崩溃:
Rows("9").EntireRow.Hidden = True
错误消息是:运行-时间错误,对象'Range'字段的方法“隐藏”
代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E8").Value = "No" Then
Rows("9").EntireRow.Hidden = True
ElseIf Range("E8").Value = "Yes" Then
Rows("9").EntireRow.Hidden = False
ElseIf Range("E8").Value = "" Then
Rows("9").EntireRow.Hidden = True
End If
If Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = False
ElseIf Range("E10").Value = "Yes" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "" Then
Rows("11").EntireRow.Hidden = True
End If
If Range("E58").Value = "Yes" Then
Rows("59").EntireRow.Hidden = True
ElseIf Range("E58").Value = "NA" Then
Rows("59").EntireRow.Hidden = True
Range("E60").Value = "NA"
ElseIf Range("E58").Value = "No" Then
Rows("59").EntireRow.Hidden = False
ElseIf Range("E58").Value = "" Then
Rows("59").EntireRow.Hidden = True
End If
If Range("E60").Value = "No" Then
Rows("61").EntireRow.Hidden = True
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = True
ElseIf Range("E60").Value = "NA" Then
Rows("61:62").EntireRow.Hidden = True
ElseIf Range("E60").Value = "Yes" Then
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = False
Rows("61").EntireRow.Hidden = True
ElseIf Range("E60").Value = "" Then
Rows("61:63").EntireRow.Hidden = True
End If
If Range("E63").Value = "No" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "N/A" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Yes" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Partial" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "" Then
Rows("64").EntireRow.Hidden = True
End If
If Range("E65").Value = "False" Then
Rows("66").EntireRow.Hidden = True
Rows("67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "NA" Then
Rows("66:67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "Yes" Then
Rows("66").EntireRow.Hidden = False
Rows("67").EntireRow.Hidden = False
ElseIf Range("E65").Value = "" Then
Rows("66:67").EntireRow.Hidden = True
End If
注意:未提及的行也有类似的命令,但这里只需要执行此操作。
尝试过的解决方案:
尝试在 ELSEIF 语句中添加一行
ElseIf Range("E58").Value = "NA" Then
Range("E60").Value = "NA"
虽然这确实吐出 E60 中的 NA,但代码循环回到顶部并在第 6 行再次失败。
尝试添加一个 public sub 来执行与上面相同的操作,并调用这个 public sub 放置在与 Range("E60") 相同的位置.Value = "NA" 语句但它在同一位置失败 and/or 使 excel.
崩溃
尝试使用 Application.EnableEvents = True/False 进行试验,但这会导致 ELSEIF 语句( ElseIf Range("E58").Value = "" Then
Rows("59").EntireRow.Hidden = True) 无法正常运行。
非常感谢您的帮助。
谢谢。
运行 只有当您选择的单元格被更改时您才需要的代码,而不是工作表中的任何单元格。
例如:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:C10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
因为此代码仅显示来自 Range("A1:C10")
的单元格的消息。在您的情况下,当 E58 中发生更改时,您应该 运行 一些特定的逻辑,并在 Worksheet_Change
事件中排除 E60 和 E65。
示例来自 here。读一读。这应该可以轻松实现您想要的效果。
您必须在 Private Sub Worksheet_Change(ByVal Target As Range)
之后添加 Application.EnableEvents = False
,在 End Sub
之前添加 Application.EnableEvents = True
。
由于您试图更改同一 sheet 上的单元格值,因此当您更改同一 sheet 上的单元格值时,Worksheet_Change
事件将自行触发,从而导致无限循环.
修改后的代码如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range("E8").Value = "No" Then
Rows("9").EntireRow.Hidden = True
ElseIf Range("E8").Value = "Yes" Then
Rows("9").EntireRow.Hidden = False
ElseIf Range("E8").Value = "" Then
Rows("9").EntireRow.Hidden = True
End If
If Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = False
ElseIf Range("E10").Value = "Yes" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "" Then
Rows("11").EntireRow.Hidden = True
End If
If Range("E58").Value = "Yes" Then
Rows("59").EntireRow.Hidden = True
ElseIf Range("E58").Value = "NA" Then
Rows("59").EntireRow.Hidden = True
Range("E60").Value = "NA"
ElseIf Range("E58").Value = "No" Then
Rows("59").EntireRow.Hidden = False
ElseIf Range("E58").Value = "" Then
Rows("59").EntireRow.Hidden = True
End If
If Range("E60").Value = "No" Then
Rows("61").EntireRow.Hidden = True
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = True
ElseIf Range("E60").Value = "NA" Then
Rows("61:62").EntireRow.Hidden = True
ElseIf Range("E60").Value = "Yes" Then
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = False
Rows("61").EntireRow.Hidden = True
ElseIf Range("E60").Value = "" Then
Rows("61:63").EntireRow.Hidden = True
End If
If Range("E63").Value = "No" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "N/A" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Yes" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Partial" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "" Then
Rows("64").EntireRow.Hidden = True
End If
If Range("E65").Value = "False" Then
Rows("66").EntireRow.Hidden = True
Rows("67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "NA" Then
Rows("66:67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "Yes" Then
Rows("66").EntireRow.Hidden = False
Rows("67").EntireRow.Hidden = False
ElseIf Range("E65").Value = "" Then
Rows("66:67").EntireRow.Hidden = True
End If
Application.EnableEvents = True
End Sub
注意:我假设您的代码中有更多元素。你写
I'm trying to update the code so that if anyone selects "NA" in cell
E58
, (there are 3 drop-down options on this cell: Yes/No/NA) it
updates the value of cell E60
and E65
as being NA as well,...
但是您的代码不会更新这些单元格。只有 hiding/unhiding 行或列不会触发 Worksheet_Change
事件,因此不会导致无限循环。
花了 3 个多小时试图解决这个问题。任何帮助,将不胜感激。我在底部尝试过的解决方案。
问题:
我正在尝试更新代码,以便如果有人在单元格 E58 中选择“NA”(此单元格上有 3 个下拉选项:Yes/No/NA),它会更新单元格 E60 的值和 E65 也是 NA,而不会中断当前的操作。我尝试过的每个解决方案都会导致代码循环回到顶部并在从顶部开始的第 6 行失败 and/or 导致文件崩溃:
Rows("9").EntireRow.Hidden = True
错误消息是:运行-时间错误,对象'Range'字段的方法“隐藏”
代码如下:
Private Sub Worksheet_Change(ByVal Target As Range)
If Range("E8").Value = "No" Then
Rows("9").EntireRow.Hidden = True
ElseIf Range("E8").Value = "Yes" Then
Rows("9").EntireRow.Hidden = False
ElseIf Range("E8").Value = "" Then
Rows("9").EntireRow.Hidden = True
End If
If Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = False
ElseIf Range("E10").Value = "Yes" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "" Then
Rows("11").EntireRow.Hidden = True
End If
If Range("E58").Value = "Yes" Then
Rows("59").EntireRow.Hidden = True
ElseIf Range("E58").Value = "NA" Then
Rows("59").EntireRow.Hidden = True
Range("E60").Value = "NA"
ElseIf Range("E58").Value = "No" Then
Rows("59").EntireRow.Hidden = False
ElseIf Range("E58").Value = "" Then
Rows("59").EntireRow.Hidden = True
End If
If Range("E60").Value = "No" Then
Rows("61").EntireRow.Hidden = True
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = True
ElseIf Range("E60").Value = "NA" Then
Rows("61:62").EntireRow.Hidden = True
ElseIf Range("E60").Value = "Yes" Then
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = False
Rows("61").EntireRow.Hidden = True
ElseIf Range("E60").Value = "" Then
Rows("61:63").EntireRow.Hidden = True
End If
If Range("E63").Value = "No" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "N/A" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Yes" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Partial" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "" Then
Rows("64").EntireRow.Hidden = True
End If
If Range("E65").Value = "False" Then
Rows("66").EntireRow.Hidden = True
Rows("67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "NA" Then
Rows("66:67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "Yes" Then
Rows("66").EntireRow.Hidden = False
Rows("67").EntireRow.Hidden = False
ElseIf Range("E65").Value = "" Then
Rows("66:67").EntireRow.Hidden = True
End If
注意:未提及的行也有类似的命令,但这里只需要执行此操作。
尝试过的解决方案:
尝试在 ELSEIF 语句中添加一行
ElseIf Range("E58").Value = "NA" Then Range("E60").Value = "NA"
虽然这确实吐出 E60 中的 NA,但代码循环回到顶部并在第 6 行再次失败。
尝试添加一个 public sub 来执行与上面相同的操作,并调用这个 public sub 放置在与 Range("E60") 相同的位置.Value = "NA" 语句但它在同一位置失败 and/or 使 excel.
崩溃尝试使用 Application.EnableEvents = True/False 进行试验,但这会导致 ELSEIF 语句( ElseIf Range("E58").Value = "" Then Rows("59").EntireRow.Hidden = True) 无法正常运行。
非常感谢您的帮助。
谢谢。
运行 只有当您选择的单元格被更改时您才需要的代码,而不是工作表中的任何单元格。
例如:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim KeyCells As Range
' The variable KeyCells contains the cells that will
' cause an alert when they are changed.
Set KeyCells = Range("A1:C10")
If Not Application.Intersect(KeyCells, Range(Target.Address)) _
Is Nothing Then
' Display a message when one of the designated cells has been
' changed.
' Place your code here.
MsgBox "Cell " & Target.Address & " has changed."
End If
End Sub
因为此代码仅显示来自 Range("A1:C10")
的单元格的消息。在您的情况下,当 E58 中发生更改时,您应该 运行 一些特定的逻辑,并在 Worksheet_Change
事件中排除 E60 和 E65。
示例来自 here。读一读。这应该可以轻松实现您想要的效果。
您必须在 Private Sub Worksheet_Change(ByVal Target As Range)
之后添加 Application.EnableEvents = False
,在 End Sub
之前添加 Application.EnableEvents = True
。
由于您试图更改同一 sheet 上的单元格值,因此当您更改同一 sheet 上的单元格值时,Worksheet_Change
事件将自行触发,从而导致无限循环.
修改后的代码如下所示:
Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
If Range("E8").Value = "No" Then
Rows("9").EntireRow.Hidden = True
ElseIf Range("E8").Value = "Yes" Then
Rows("9").EntireRow.Hidden = False
ElseIf Range("E8").Value = "" Then
Rows("9").EntireRow.Hidden = True
End If
If Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "No" Then
Rows("11").EntireRow.Hidden = False
ElseIf Range("E10").Value = "Yes" Then
Rows("11").EntireRow.Hidden = True
ElseIf Range("E10").Value = "" Then
Rows("11").EntireRow.Hidden = True
End If
If Range("E58").Value = "Yes" Then
Rows("59").EntireRow.Hidden = True
ElseIf Range("E58").Value = "NA" Then
Rows("59").EntireRow.Hidden = True
Range("E60").Value = "NA"
ElseIf Range("E58").Value = "No" Then
Rows("59").EntireRow.Hidden = False
ElseIf Range("E58").Value = "" Then
Rows("59").EntireRow.Hidden = True
End If
If Range("E60").Value = "No" Then
Rows("61").EntireRow.Hidden = True
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = True
ElseIf Range("E60").Value = "NA" Then
Rows("61:62").EntireRow.Hidden = True
ElseIf Range("E60").Value = "Yes" Then
Rows("62").EntireRow.Hidden = False
Rows("63").EntireRow.Hidden = False
Rows("61").EntireRow.Hidden = True
ElseIf Range("E60").Value = "" Then
Rows("61:63").EntireRow.Hidden = True
End If
If Range("E63").Value = "No" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "N/A" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Yes" Then
Rows("64").EntireRow.Hidden = True
ElseIf Range("E63").Value = "Partial" Then
Rows("64").EntireRow.Hidden = False
ElseIf Range("E63").Value = "" Then
Rows("64").EntireRow.Hidden = True
End If
If Range("E65").Value = "False" Then
Rows("66").EntireRow.Hidden = True
Rows("67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "NA" Then
Rows("66:67").EntireRow.Hidden = True
ElseIf Range("E65").Value = "Yes" Then
Rows("66").EntireRow.Hidden = False
Rows("67").EntireRow.Hidden = False
ElseIf Range("E65").Value = "" Then
Rows("66:67").EntireRow.Hidden = True
End If
Application.EnableEvents = True
End Sub
注意:我假设您的代码中有更多元素。你写
I'm trying to update the code so that if anyone selects "NA" in cell
E58
, (there are 3 drop-down options on this cell: Yes/No/NA) it updates the value of cellE60
andE65
as being NA as well,...
但是您的代码不会更新这些单元格。只有 hiding/unhiding 行或列不会触发 Worksheet_Change
事件,因此不会导致无限循环。