【问题标题】:Return text in cell based on value entered in another cell根据在另一个单元格中输入的值返回单元格中的文本
【发布时间】:2021-04-23 09:58:47
【问题描述】:

我的表 (F -> I) 中有可能无限行的列,这些列是带有简单是/否列表的下拉列表。

它以空行开始,用户在其他行中输入数据,然后根据问题选择是/否。

我正在寻找一些 VBA 来表示如果用户在 F 列中选择了“否”,那么在 K 列中,预先填充“F 列:”。这个想法是,任何被选为“否”的东西都会填充到 K 中,这样用户就可以添加他们的注释并参考 F 列。例如:“F 列:这不符合要求,因为 xxxxx”

我在网上搜索时尝试了一些示例,但似乎没有任何效果:

R = 4

'loop to the last row
Do Until Range("F" & R) = ""
    'check each cell if if contains 'apple' then..
    '..place 'Contains Apple' on column B
    If InStr(1, Range("F" & R), "No") Then
        Range("K" & R) = "Test Plan"
    End If
    
    R = R + 1
Loop

我也尝试将它放在工作表更改子中,但它没有按预期工作。

任何帮助表示赞赏。谢谢

【问题讨论】:

  • worksheet change 是一种更好的方法,而不是遍历整个范围。你能分享worksheet change的代码吗? Yu可能还想看看如何使用worksheet change
  • 我只是将以上内容复制到 worksheet_change 中,认为它会起作用,因为通读,它是有道理的并且应该起作用,但它没有大声笑

标签: excel vba


【解决方案1】:

这是你正在尝试的吗?我已经评论了代码。如需更多解释,我建议您通过How to handle Worksheet_Change

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim aCell As Range
    
    '~~> Error handling
    On Error GoTo Whoa
    
    '~~> Switch off events
    Application.EnableEvents = False
    
    '~~> Check of the change happened in Col F
    If Not Intersect(Target, Columns(6)) Is Nothing Then
        '~~> Loop through all the cells in col F where
        '~~> the change happened
        For Each aCell In Target.Cells
            '~~> Check if the value is NO
            If UCase(aCell.Value2) = "NO" Then
                '~~> Update Col K
                Range("K" & aCell.Row).Value = "Test Plan"
            Else
                '~~> If not NO then WHAT ACTION? For example user
                '~~> deletes the existing NO
            End If
        Next
    End If
    
Letscontinue:
    '~~> Switch events back on
    Application.EnableEvents = True
    Exit Sub
Whoa:
    MsgBox Err.Description
    Resume Letscontinue
End Sub

行动中

【讨论】:

    【解决方案2】:

    Worksheet_Change试试这个代码

    Option Explicit
    Option Compare Text
    
    Private Sub Worksheet_Change(ByVal Target As Range)
            If Target.Column = 6 And Target.Value = "No" Then
                Target.Parent.Range("K" & Target.Row).Value = "Column F: "
            End If
    End Sub
    

    【讨论】:

    • 干杯 Glenn G,不幸的是没有雪茄。我认为这可能是因为我在那里有另一个工作表更改子,但我删除了它,当我在 F 列中选择是时它没有做任何事情
    • @Martin 我遇到的问题是“否”和“否”被视为不同,因此区分大小写。看看这是否是它遇到的问题
    • @Martin 我已经用模块顶部(不在任何过程中)的一些选项(Option ExplicitOption Compare Text)更新了我的答案,这些选项将改变模块比较的方式事物。这将绕过区分大小写,但如果您将任何其他代码添加到模块中,您应该记住这一点。
    • 重新阅读您的评论。我发布的代码仅在答案是否定的情况下运行。如果答案是肯定的,那么它什么也不做。这不是预期的行动吗?
    • 我已经将选项作为另一个例程的一部分,因此区分大小写不会成为您的代码的问题,因为默认值是“是”和“否”,但不幸的是 K 列没有得到更新.所以我有一个问题询问是否已经检查过某些东西。如果是,则无需在 K 列中添加任何内容,因为一切都很好,但是,如果否,则 K 列应预先填充一些内容以引用该列/问题,以及将行转换为另一行的条件格式颜色(但我已经做了一点)。
    猜你喜欢
    • 1970-01-01
    • 2019-10-04
    • 1970-01-01
    • 2013-12-27
    • 1970-01-01
    • 1970-01-01
    • 2014-01-05
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多