vba - 否则 VBA 问题

标签 vba excel

我的问题是我的代码没有选择“Medium”变量

If Range("B24").Value = "Medium" Then
Sheets("Sheet2").Visible = True

你能告诉我有什么问题吗(“标准”应该显示行,“中”应该隐藏它们但取消隐藏Sheet2,高再次保持行隐藏但取消隐藏Sheet2,如果(B24)为空它应该保留行和 Sheet2 隐藏:

Private Sub Worksheet_Change(ByVal Target As Range)
    If Range("B24").Value = "Standard" Then
    Sheets("Sheet2").Visible = False
End If
    If Range("B24").Value = "Medium" Then
    Sheets("Sheet2").Visible = True
End If
    If Range("B24").Value = "High" Then
    Sheets("Sheet2").Visible = True
End If
    Else
    Sheets("Sheet2").Visible = False
End If
    If Range("B24").Value = "Standard" Then
    Rows("29:47").EntireRow.Hidden = False
    Else
    Rows("29:47").EntireRow.Hidden = True
    End If
End Sub

最佳答案

您显然缺少一个If,并且您的代码不应该工作。格式化后的样子如下:

Private Sub Worksheet_Change(ByVal Target As Range)

    If Range("B24").Value = "Standard" Then
        Sheets("Sheet2").Visible = False
    End If

    If Range("B24").Value = "Medium" Then
        Sheets("Sheet2").Visible = True
    End If

    If Range("B24").Value = "High" Then
        Sheets("Sheet2").Visible = True
    End If
'Is this Else an IF?
Else
    Sheets("Sheet2").Visible = False
End If

If Range("B24").Value = "Standard" Then
    Rows("29:47").EntireRow.Hidden = False
Else
    Rows("29:47").EntireRow.Hidden = True
End If

End Sub

如果省略 If-Else,使用 Select-Case 语句的代码看起来会更好一些:

Private Sub Worksheet_Change(ByVal Target As Range)

    Select Case Range("B24")

    Case "Standard"
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = False

    Case "Medium"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case "High"
        Sheets("Sheet2").Visible = True
        Rows("29:47").EntireRow.Hidden = True

    Case Else
        Sheets("Sheet2").Visible = False
        Rows("29:47").EntireRow.Hidden = True

    End Select

End Sub

您可能可以更进一步,在 select case 之前编写 Rows("29:47").EntireRow.Hidden = True 并从 case 中删除这一行,从而遵循 Do-不重复原则。但在这种情况下可能不需要。

如果您想添加第二个范围,可以这样做:

Select Case True    
    Case Range("B24") = "Standard"      
    Case Range("B26") = "Medium"        
End Select

但是,它只会计算一次,因此如果两者都为 true,B26 就不会发生。

关于vba - 否则 VBA 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47529157/

相关文章:

ms-access - MS Access 导入 UTF-8 文件

html - 从网页中检索所有 Excel 文件链接

vba - 平均公式 Excel VBA

VBA Variant - IsNull 和 IsEmpty 对于空数组均为 false

excel - VBA(Excel): Find Based on Multiple Search Criteria Without Looping

excel - if else 中的 if else 错误

Excel VBA .Trim 函数更改。到 ,

java - 如何读取 Excel 日期并将其存储到我的数据库中?

vba - 工作表和模块之间的变量不合作

excel - Visual Basic - for..next 和公式