有一种解决方法可以解决 Excel 到 Excel 的复制问题,但现在我在将它粘贴到任何其他应用程序时遇到了问题
根据以下帖子,我为 VBA 改编了那里提到的代码。现在的问题是,Windows 现在将纯文本粘贴到其他应用程序中,但它在 Excel 中完美运行。
我在这篇文章的末尾添加了一些 GIF 以进行澄清。
stackoverflow - Excel VBA code to copy a specific string to clipboard
Byte Comb Copy and Paste in VBA
stackoverflow - How do I copy formatted HTML string into a Clipboard for paste using C#?
Mike Stall's .NET Debugging Blog - Copying HTML on the clipboard
上面的链接指向将格式化的 HTML 链接放入剪贴板的子例程:
Public Sub CopyCellHyperlinkToClipboard(sLink As String, sDescription As String)
Dim objData As Object
On Error Resume Next
' this is a late bound MSForms.DataObject
Set objData = CreateObject("New:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")
' copy current cell formula to clipboard
With objData
.SetText CreateHTMLString(sLink, sDescription)
.PutInClipboard
End With
End Sub
stackoverflow - How to set HTML to clipboard in C#?
Mike Stall's .NET Debugging Blog - Copying HTML on the clipboard
上面的链接指向创建实际 HTML 字符串的函数:
Function CreateHTMLString(sLink As String, sDescription As String)
Dim sContextStart As String, sContextEnd As String, m_sDescription As String, sHtmlFragment As String, sData As String, sSourceURL As String
m_sDescription = "Version:1.0" + Constants.vbCrLf _
+ "StartHTML:aaaaaaaaaa" + Constants.vbCrLf _
+ "EndHTML:bbbbbbbbbb" + Constants.vbCrLf _
+ "StartFragment:cccccccccc" + Constants.vbCrLf _
+ "EndFragment:dddddddddd" + Constants.vbCrLf
sContextStart = "<HTML><BODY><!--StartFragment -->"
'sSourceURL = "" + Constants.vbCrLf
sHtmlFragment = "<A HREF=" + Strings.Chr(34) + sLink + Strings.Chr(34) + ">" + sDescription + "</A>"
sContextEnd = "<!--EndFragment --></BODY></HTML>"
sData = m_sDescription + sContextStart + sHtmlFragment + sContextEnd
sData = Replace(sData, "aaaaaaaaaa", PadLeft(10, "0", Len(m_sDescription)))
sData = Replace(sData, "bbbbbbbbbb", PadLeft(10, "0", Len(sData)))
sData = Replace(sData, "cccccccccc", PadLeft(10, "0", Len(m_sDescription + sContextStart)))
sData = Replace(sData, "dddddddddd", PadLeft(10, "0", Len(m_sDescription + sContextStart + sHtmlFragment)))
'sData.Dump();
CreateHTMLString = sData
End Function
由于 VBA 不支持填充,我根据以下链接创建了此函数:
stackoverflow - Any method equivalent to PadLeft/PadRight?
Function PadLeft(iLength As Integer, cChar As String, sText As String)
cChar = Left(cChar, 1)
PadLeft = Right(String(iLength, cChar) & sText, iLength)
End Function
插入一个从 Excel 2010 实例到另一个实例的超链接,您可以看到它只插入超链接的标签:
在另一个应用程序中的 Excel 中插入超链接完美无瑕:
所以我写了上面的代码。现在 Excel2Excel 工作:
但它不适用于其他应用程序: