Excel 根据在其他单元格中输入的值返回单元格中的文本
我的表(F->I)中有可能无限行的列,这些列是带有简单的是/否列表的下拉列表 它以空行开始,用户在其他行中输入数据,然后根据问题选择是/否 我要找的是一些VBA,如果用户在F列中选择了“否”,那么在K列中,用“F列:”预填充。其想法是,任何被选为“否”的内容都用K填充,以便用户可以添加注释和参考列F。例如:“列F:这不符合要求,因为xxxxx” 我在搜索网络时尝试了几个例子,但似乎没有任何效果:Excel 根据在其他单元格中输入的值返回单元格中的文本,excel,vba,Excel,Vba,我的表(F->I)中有可能无限行的列,这些列是带有简单的是/否列表的下拉列表 它以空行开始,用户在其他行中输入数据,然后根据问题选择是/否 我要找的是一些VBA,如果用户在F列中选择了“否”,那么在K列中,用“F列:”预填充。其想法是,任何被选为“否”的内容都用K填充,以便用户可以添加注释和参考列F。例如:“列F:这不符合要求,因为xxxxx” 我在搜索网络时尝试了几个例子,但似乎没有任何效果: R = 4 'loop to the last row Do Until Range("
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
我也试着把它放在一个工作表变更子表中,但它并没有像预期的那样工作
谢谢你的帮助。谢谢请在
工作表中尝试此代码\u更改
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
这就是你想要的吗?我已经对代码进行了注释。要了解更多的解释,我建议您仔细阅读 在行动中
工作表更改
是一种更好的方法,而不是在整个范围内循环。您能否共享工作表更改的代码?Yu可能还想看看如何使用,我只是将上面的内容复制到工作表中,并认为它会起作用,正如通读一样,它是有意义的,应该会起作用,但它没有让Glenn G高兴,只是尝试了一下,不幸的是没有雪茄。我想这可能是因为我有另一个工作表更改子项在那个里,但我删除了它,当我在列中选择“是”时,它并没有做任何事情F@Martin我遇到的情况是,“No”和“No”不一样,所以它区分大小写。看看这是否是问题所在having@Martin我已经用一些选项更新了我的答案(Option Explicit
和Option Compare Text
),这些选项位于模块顶部(而不是任何过程中),它们将改变模块比较事物的方式。这将绕过区分大小写的问题,但如果您向模块中添加任何其他代码,请记住这一点。只需重新阅读您的注释。我发布的代码只有在答案为“否”时才会运行。如果答案为“是”,则不会执行任何操作。这不是预期的操作吗?我已经有了作为另一个例程的一部分的选项,所以区分大小写不会成为代码的问题,因为默认值是肯定的和否定的,但不幸的是K列没有得到更新。所以我有一个问题,问是否有东西被检查过。如果是,则无需在K列中添加任何内容,因为一切都很好,但是,如果不是,则K列应预先填充一些内容以引用该列/问题,以及将行转换为另一种颜色的条件格式(但我已经完成了这一部分)。
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