在用户窗体 VBA 中使用带有选项按钮的 IF/Then 语句

发布于 2025-01-16 17:15:10 字数 888 浏览 0 评论 0原文

有没有一种方法可以对选项按钮进行编码,以根据两者的选择给出一个值?我尝试了多种方法,但似乎一事无成。这是我尝试过的最后一个代码,如果可能的话,这就是我希望它工作的方式。这段代码现在的方式是,我只得到一个值。

Private Sub OptBtn()

    Dim n As Long

    n = Sheets1.Range("A" & Application.Rows.Count).End(xlUp).Row
    Range("A" & Rows.Count).End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.EntireRow.Insert


    If Me.OptBtn_AddCard.Value = True & Me.OptBtn_ManagedBy.Value = True Then
        Sheets1.Range("I" & n + 1).Value = "ACTIVE"

    Else

        If Me.OptBtn_AddCard.Value = True & Me.OptBtn_ManagedBy.Value = False Then
            Sheets1.Range("I" & n + 1).Value = "AVAILABLE"

        Else

            If Me.OptBtn_AddCard.Value = False & Me.OptBtn_ManagedBy.Value = True Then
                Sheets1.Range("I" & n + 1).Value = "ACTIVE"

            End If
        End If
    End If

End Sub

Is there a way to code the option buttons to give a value based off both being selected? I have tried multiple ways and seems I am getting nowhere. This is the last code I have tried and this is how I would like it to work if possible. The way this code is right now, I am only getting one value.

Private Sub OptBtn()

    Dim n As Long

    n = Sheets1.Range("A" & Application.Rows.Count).End(xlUp).Row
    Range("A" & Rows.Count).End(xlUp).Select
    ActiveCell.Offset(1, 0).Select
    ActiveCell.EntireRow.Insert


    If Me.OptBtn_AddCard.Value = True & Me.OptBtn_ManagedBy.Value = True Then
        Sheets1.Range("I" & n + 1).Value = "ACTIVE"

    Else

        If Me.OptBtn_AddCard.Value = True & Me.OptBtn_ManagedBy.Value = False Then
            Sheets1.Range("I" & n + 1).Value = "AVAILABLE"

        Else

            If Me.OptBtn_AddCard.Value = False & Me.OptBtn_ManagedBy.Value = True Then
                Sheets1.Range("I" & n + 1).Value = "ACTIVE"

            End If
        End If
    End If

End Sub

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

小…楫夜泊 2025-01-23 17:15:10

使用 And 而不是 &

If Me.OptBtn_AddCard.Value = True And Me.OptBtn_ManagedBy.Value = True Then
    Sheets1.Range("I" & n + 1).Value = "ACTIVE"
Else
    If Me.OptBtn_AddCard.Value = True And Me.OptBtn_ManagedBy.Value = False Then
        Sheets1.Range("I" & n + 1).Value = "AVAILABLE"
    Else
        If Me.OptBtn_AddCard.Value = False And Me.OptBtn_ManagedBy.Value = True Then
            Sheets1.Range("I" & n + 1).Value = "ACTIVE"
        End If
    End If
End If

代码可以这样缩短:

If Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value Then
    Sheets1.Range("I" & n + 1).Value = "ACTIVE"
Else
    If Me.OptBtn_AddCard.Value And Not Me.OptBtn_ManagedBy.Value Then
        Sheets1.Range("I" & n + 1).Value = "AVAILABLE"
    Else
        If Not Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value Then
            Sheets1.Range("I" & n + 1).Value = "ACTIVE"
        End If
    End If
End If

我个人喜欢 Switch() 变体:

切换函数< /a>:计算表达式列表并返回 Variant 值或与列表中第一个 True 表达式关联的表达式


Sheets1.Range("I" & n + 1).Value = Switch( _
    Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value, "ACTIVE", _
    Me.OptBtn_AddCard.Value And Not Me.OptBtn_ManagedBy.Value, "AVAILABLE", _
    Not Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value, "ACTIVE")

Use And instead of &.

If Me.OptBtn_AddCard.Value = True And Me.OptBtn_ManagedBy.Value = True Then
    Sheets1.Range("I" & n + 1).Value = "ACTIVE"
Else
    If Me.OptBtn_AddCard.Value = True And Me.OptBtn_ManagedBy.Value = False Then
        Sheets1.Range("I" & n + 1).Value = "AVAILABLE"
    Else
        If Me.OptBtn_AddCard.Value = False And Me.OptBtn_ManagedBy.Value = True Then
            Sheets1.Range("I" & n + 1).Value = "ACTIVE"
        End If
    End If
End If

The code can be shortened like this:

If Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value Then
    Sheets1.Range("I" & n + 1).Value = "ACTIVE"
Else
    If Me.OptBtn_AddCard.Value And Not Me.OptBtn_ManagedBy.Value Then
        Sheets1.Range("I" & n + 1).Value = "AVAILABLE"
    Else
        If Not Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value Then
            Sheets1.Range("I" & n + 1).Value = "ACTIVE"
        End If
    End If
End If

I personally like the Switch() variation:

Switch function: Evaluates a list of expressions and returns a Variant value or an expression associated with the first expression in the list that is True

Sheets1.Range("I" & n + 1).Value = Switch( _
    Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value, "ACTIVE", _
    Me.OptBtn_AddCard.Value And Not Me.OptBtn_ManagedBy.Value, "AVAILABLE", _
    Not Me.OptBtn_AddCard.Value And Me.OptBtn_ManagedBy.Value, "ACTIVE")
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文