如何从选择中定位特定范围的单元格?
Posted
技术标签:
【中文标题】如何从选择中定位特定范围的单元格?【英文标题】:How do i target a specific range of cells from selection? 【发布时间】:2019-03-28 14:21:15 【问题描述】:我想要的是能够选择任意数量的单元格并按下将注册信息的按钮。所有信息都是水平放置的,这意味着如果我选择 L10 并按下按钮,N10、O10 和 P10 将根据我告诉他们的内容进行更改。
我已经成功地做到了这一点,但它有一个小问题。只要所选单元格的信息是唯一的,它就可以正常工作。但我希望能够使用 L 列,它的随机数可能经常与其他单元格中的相同。
If cel.Value = Range("g16") Then
Range("ff16").Value = True
Range("p16").Value = Now
If Range("m16").Value <= 0 Then
Range("o16").Value = Range("o16").Value & " | " & VarNUMCB
Else
End If
Else
If cel.Value = Range("e16") Then
Range("ff16").Value = True
Range("p16").Value = Now
If Range("m16").Value <= 0 Then
Range("o16").Value = Range("o16").Value & " | " & VarNUMCB
Else
End If
Else
End If
End If
预期:
L10 选中,L11 选中,L18 选中,L23 选中 -> 按钮被按下 -> 弹出框要求签名 -> N10,N11,N18,N23 被勾选,O10,O11,O18,O23 显示签名和P10,P11,P18,P23 显示日期和时间。
发生: 如果来自 L 的值恰好与任何其他随机 L 单元格相同,它将对两者都应用更改,这是我不想要的。
【问题讨论】:
需要样本数据和预期结果。 @tigeravatar 你到底需要什么?我可以尝试展示任何东西。我期望发生的是,除 L 列之外的任何选定单元格都不会触发任何内容。当所选的单元/多个小区来自列L时,它将水平地改变n,o和p。例如。选择单元格 L4 并按下按钮:N4、O4 和 P4 将发生变化。 在宏运行之前编辑您的问题以包含示例数据,指出您将从示例数据中“选择”的内容,然后显示第二组示例数据,以显示数据在宏运行(这是您的预期结果)。使帮助变得更加容易。现在我们不知道值应该更新到什么,或者为什么重复值会影响您的结果。我们也不知道您正在使用什么类型的数据。这些是数字吗?文本字符串?日期?还有什么? @tigeravatar 我无权发送屏幕截图。我知道问题是什么,但我不知道如何用不同的代码解决它。就行了: ~~~~ If cel.Value = Range("g16") Then ~~~~ 发生的事情是选择值会从字面上寻找它的值,我不想这样做。我希望它查看实际的单元格名称。这个问题使得如果我的选择碰巧什么都不是,它被认为是 0,因此任何其他值为 0 的东西也会被宏更改。 不需要截图,只需将一些简单的示例数据作为文本放入。而且您的代码实际上并没有引用“选择”,而是硬编码以查看单元格 G16 和 E16。如果您担心单元格为空,只需添加一个额外的 IF 语句来验证单元格不为空,例如IF Len(cel.Value) = 0 Then 'Do Nothing
【参考方案1】:
也许你正在寻找这样的东西:
Sub tgr()
Dim rSelected As Range
Dim rCell As Range
Dim sSignature As String
Dim dtTimeStamp As Date
'Verify that the current selection is a range (and not a chart or something)
If TypeName(Selection) <> "Range" Then
MsgBox "Invalid selection. Exiting Macro.", , "Error"
Exit Sub
End If
'Get the signature
sSignature = InputBox("Provide Signature", "Signature")
If Len(sSignature) = 0 Then Exit Sub 'Pressed cancel
'Get the current date and time
dtTimeStamp = Now
'Only evaluate selected cells in column L, ignore other selected cells
Set rSelected = Intersect(Selection.Parent.Columns("L"), Selection)
If rSelected Is Nothing Then
MsgBox "Must select cell(s) in column L. Exiting Macro.", , "Error"
Exit Sub
End If
'Loop through each selected L cell
For Each rCell In rSelected.Cells
'"Tick" same row, column N
rCell.Offset(, 2).Value = "Tick"
'Signature in same row, column O
rCell.Offset(, 3).Value = sSignature
'Date and time in same row, column P
rCell.Offset(, 4).Value = dtTimeStamp
Next rCell
End Sub
【讨论】:
我自己尝试了该代码以查看发生了什么并在线遇到错误 ~~~~ For Each rCell In rSelected ~~~~ says runtime error '424' object required @user163342 是的,我已经编辑了代码以包含检查以验证是否填充了rSelected
。这只是意味着您没有选择 L 列中的任何单元格。
完美运行,非常感谢,抱歉给您带来的麻烦以上是关于如何从选择中定位特定范围的单元格?的主要内容,如果未能解决你的问题,请参考以下文章
选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA