VBA 按钮 - 基于单元格值而不是 ActiveCell

Posted

技术标签:

【中文标题】VBA 按钮 - 基于单元格值而不是 ActiveCell【英文标题】:VBA button - based on a cell value rather than ActiveCell 【发布时间】:2020-03-22 20:04:37 【问题描述】:

我对 VBA 非常陌生,并尝试更新下面的代码以在单元格而不是 ActiveCell 中查找值。具体来说,我想找到值为“B”的单元格下方的行。 (例如),复制下面的 3 行,然后将这 3 行粘贴+插入到复制的 3 行的正下方。 实际上,我正在尝试让我的 VBA 按钮工作,而不要求用户首先单击特定单元格。我当前的代码基于 ActiveCell,只要你在正确的单元格中,它就可以正常工作.任何见解都会有所帮助。

Sub CommandButton2_Click()
    Dim NextRow As Long
    Dim I As Long

    With Range(ActiveCell.Offset(rowOffset:=2), ActiveCell.Offset(rowOffset:=0))
        NextRow = .Row + .Rows.Count
        Rows(NextRow & ":" & NextRow + .Rows.Count * (1) - 1).Insert Shift:=xlDown
        .EntireRow.Copy Rows(NextRow & ":" & NextRow + .Rows.Count * (1) - 1)
        .Resize(.Rows.Count * (1 + 1)).Sort key1:=.Cells(1, 1)
    End With
End Sub

【问题讨论】:

您在哪一列中搜索“B 的值”。 (例如。)'?在 B:B 中,您尝试了 2 合一问题? :) 【参考方案1】:

请测试下一个更新的代码。它将需要您需要识别的单元格的字符串/文本(在 InputBox 中)。出于测试原因,我使用了字符串“testSearch”。请把它放在 A:A 的单元格中进行识别并测试它。然后,您可以使用所需的任何字符串...

Sub testTFindCellFromString()
  Dim NextRow As Long, I As Long, strSearch As String
  Dim sh As Worksheet, actCell As Range, rng As Range

   strSearch = InputBox("Please, write the string from the cell to be identified", _
                      "Searching string", "testSearch")
   If strSearch = "" Then Exit Sub
   Set sh = ActiveSheet
   Set rng = sh.Range("A1:A" & sh.Range("A" & Cells.Rows.Count).End(xlUp).Row)
   Set actCell = testFindActivate("testSearch", rng)
   If actCell Is Nothing Then Exit Sub

   With Range(actCell.Offset(2, 0), actCell.Offset(0, 0))
        NextRow = .Row + .Rows.Count
        Rows(NextRow & ":" & NextRow + .Rows.Count * (1) - 1).Insert Shift:=xlDown
        .EntireRow.Copy Rows(NextRow & ":" & NextRow + .Rows.Count * (1) - 1)
        .Resize(.Rows.Count * (1 + 1)).Sort key1:=.Cells(1, 1)
    End With
  Debug.Print actCell.Address
End Sub
Private Function testFindActivate(strSearch As String, rng As Range) As Range
   Dim actCell As Range
   Set actCell = rng.Find(What:=strSearch)
   If actCell Is Nothing Then
        MsgBox """" & strSearch & """ could not be found..."
        Exit Function
   End If
   Set testFindActivate = actCell
End Function

【讨论】:

感谢您的快速响应!我正在搜索“B”。在 A 列中。我很抱歉,但我不完全遵循您在答案中列出的两种情况。 你能更好地解释一下你需要什么吗?您是否尝试过将 BB.:B 与 A:A 组合的代码? 好的,谢谢。作为新手,我不确定如何组合代码,尤其是您建议不要使用选择。我还用'With'吗? 'With Range(actCell2.Offset(rowOffset:=3), actCell2.Offset(rowOffset:=1))' 或 'actCell2.Select.Range.Offset...' '设置 rng = sh.Range("A:A" & sh.Range("B." & Cells.Rows.Count).End(xlUp).Row)' @Brian:为什么是actCell2?好的。我会将我的Sub 转换为Function,并将其集成到您的代码中...

以上是关于VBA 按钮 - 基于单元格值而不是 ActiveCell的主要内容,如果未能解决你的问题,请参考以下文章

基于公式的单元格值触发的 VBA 电子邮件代码

Excel VBA:复制增量单元格值

Excel VBA:用相邻的单元格值填充空单元格

在 VBA 中使用 .Find 作为范围

基于单元格值的自动填充线

创建打印按钮,启用和禁用基于单元格值excel