【问题标题】:How to filter based on clipboard in Excel using VBA?如何使用 VBA 在 Excel 中基于剪贴板进行过滤?
【发布时间】:2019-06-14 22:04:51
【问题描述】:

我与我部门的一群人一起工作,并且总是与他们分享我的代码,这样你也将帮助我和我的同事!

使用宏记录器,我创建了这段代码来过滤我想要过滤的列,但是我需要更改代码以根据剪贴板上的内容(我按下的任何单元格 Ctrl kbd>+C 之前)。我在录制宏时按下了 Ctrl+C,但它没有记录那些按钮按下,它只是将当时剪贴板中的内容粘贴到宏中。

Sub Filter()

    ActiveSheet.Range("$A$1:$V$12955").AutoFilter Field:=2, Criteria1:= _
        "Clipboard"

End Sub

【问题讨论】:

  • 为什么不只使用单元格的值而忘记剪贴板?
  • 将要使用的单元格将发生变化。它也可能并不总是来自 excel。想知道如何访问剪贴板以获取此宏的此类功能以及我可能创建的未来宏。在询问之前,我进行了广泛的谷歌搜索以及搜索该网站。谢谢。
  • 您可以使用MSForms.DataObject 访问剪贴板。但是在单元格值可能发生变化的问题中,然后将值分配给一个变量并使用它。这就是变量的用途,您不应该将剪贴板用作变量。

标签: excel vba filter clipboard


【解决方案1】:

这是我在 Excel 中所做的第一个项目之一。我将解释我的代码是如何工作的,然后您可以根据需要对其进行操作。

Youtube Link on How to Use it

在您的Personal Macro 中粘贴代码后,在快速访问工具栏上为此宏创建一个快捷方式。

然后您需要做的就是在您要过滤的范围上应用Autofilter,复制包含您要过滤的值的单元格或单元格范围,然后选择您要过滤的列的标题想要应用这个过滤器。按创建的快捷方式。

它也适用于单细胞,所以你不需要修改它。只需按照上述说明操作即可。

代码如下:

Sub filtrr()
'
    Dim i As Integer
    Dim Test As String
    Dim clipboard As MSForms.DataObject
    Set clipboard = New MSForms.DataObject

    clipboard.GetFromClipboard
    Test = clipboard.GetText

    Test = Replace(Test, Chr(13), "-")
    Test = Trim(WorksheetFunction.Clean(Test))

    Dim ab() As String

    ab = Split(Test, "-")

    ReDim Preserve ab(UBound(ab) - 1)

    ActiveSheet.UsedRange.AutoFilter Field:=Selection.Column, Criteria1:=ab, Operator:= _
        xlFilterValues


End Sub

在您的情况下,它只有一个包含值的单元格,但是如果您想在包含数千个值的表中过滤 50 个值,则此代码可以挽救生命。

【讨论】:

    猜你喜欢
    • 2022-07-11
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 2018-07-30
    • 1970-01-01
    • 1970-01-01
    • 2019-12-20
    相关资源
    最近更新 更多