如何从选择中定位特定范围的单元格?

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 列中的任何单元格。 完美运行,非常感谢,抱歉给您带来的麻烦

以上是关于如何从选择中定位特定范围的单元格?的主要内容,如果未能解决你的问题,请参考以下文章

调整从所选单元格到特定范围的Excel选择

选择特定范围的单元格并仅删除突出显示的单元格并向上移动的 VBA

如何定位电子表格中一定数值范围内(如此60~70)单元格?请高手指点!

CSS:如何定位表格中的特定单元格?

选择从第一个单元格到列中使用的最后一个单元格的范围

Office表中如何把一定范围单元格的内容多列数据去除空值以TXT文本方式导出?