【发布时间】: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 代码首先将用户复制的内容粘贴为链接。我要做的是直接访问剪贴板(用户已经复制到该剪贴板)。