【问题标题】:Getting a copied formula from the clipboard in Excel VBA从 Excel VBA 中的剪贴板获取复制的公式
【发布时间】:2018-08-11 12:52:31
【问题描述】:

我有一个例程,可以有效地将链接粘贴到用户复制到剪贴板的一个或多个单元格,在“=”之后放置一个空格(个人偏好,为了便于阅读)并将锚定更改为行-仅在粘贴之前。如果链接指向另一张工作表,则字体将更改为蓝色。代码如下:

Sub QuickLink2()
'   Copies a link,putting a space after the "=" and changing the
'   anchoring to row-only. If the link is to another sheet, the
'   font is changed to blue.
    Dim r As Long, c As Long
    Dim FormulaArr() As Variant
    Dim Destination As Range

    Application.ScreenUpdating = False

'   Paste link
    On Error Resume Next
    ActiveSheet.Paste Link:=True
    If Err.Number = 1004 Then GoTo NoSelection '1004 is a paste failure
    On Error GoTo 0

'   Transfer pasted link to array
    If Selection.Cells.Count = 1 Then
        ReDim FormulaArr(1 To 1, 1 To 1)
        FormulaArr(1, 1) = Selection.Formula
    Else
        FormulaArr = Selection.Formula
    End If

'   Adjust formula spaces and anchoring
    For r = 1 To UBound(FormulaArr, 1)
        For c = 1 To UBound(FormulaArr, 2)
            FormulaArr(r, c) = Replace(FormulaArr(r, c), "=", "= ")
            FormulaArr(r, c) = Application.ConvertFormula _
            (FormulaArr(r, c), xlA1, xlA1, xlAbsRowRelColumn)
        Next c
    Next r

    Set Destination = Selection
    Destination.Formula = FormulaArr

'   Change font to blue if link is to another sheet
    If Destination(1).Formula Like "*!*" Then _
    Destination.Font.Color = RGB(0, 0, 255)
    Exit Sub

NoSelection:
    Application.CutCopyMode = False

End Sub

这里的想法是通过将粘贴的链接分配给变量数组,对数组进行必要的工作,然后将数组分配给一个范围来加速代码。然而,我真正想做的是直接从剪贴板访问复制的单元格公式,并在没有中间 ActiveSheet.Paste Link:=True 步骤的情况下分配给变量数组。

下面的代码可以让我得到复制的单元格,当然我正在寻找复制的公式。

Dim DataObj As New MSForms.DataObject
Dim S As String
DataObj.GetFromClipboard
S = DataObj.GetText

【问题讨论】:

  • 这对我来说没有多大意义,但也许我错过了一些东西。在 Excel 的正常操作中,您没有理由以这种方式涉及剪贴板。如果您可以在任务之前和之后提供示例数据。
  • 它只是一个实用程序,用户可以在其中复制单元格并将它们粘贴为具有自动锚定和格式化的链接。这就是为什么 VBA 代码首先将用户复制的内容粘贴为链接。我要做的是直接访问剪贴板(用户已经复制到该剪贴板)。

标签: vba excel


【解决方案1】:

获取公式:

Private Sub PutCellFormulaInClipBoard(ByVal Cell As Range)

    Dim oDataObject As Object

    Set oDataObject = _
        GetObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
    With oDataObject
        .Clear
        .SetText Cell.Cells(1).Formula
        .PutInClipboard
    End With

End Sub

Ref

【讨论】:

  • 请注意,用户已经将单元格复制到剪贴板,因此问题是从剪贴板获取公式,而不是首先将公式复制到剪贴板。
  • 对不起,你不能只粘贴特殊的:stackoverflow.com/a/15522593/495455我明天试试,我确定可以做到。您应该通过使用此stackoverflow.com/a/2294087/495455 设置剪贴板来做到这一点
  • 问题的症结在于如何避免粘贴。请记住,用户会将单元格复制到剪贴板。当用户按下键盘快捷键“粘贴”链接时,代码被激活。我想要代码做的是将剪贴板中的公式直接分配到变量数组中。一旦对该数组执行了各种操作,代码就会将该数组分配给用户选择的范围。从用户的角度来看,他们已经粘贴了链接,但我想在代码中尽可能避免粘贴操作。
猜你喜欢
  • 2015-07-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-08-05
  • 1970-01-01
  • 2011-12-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多