【问题标题】:excel vba: coping cell with hyperlink formula fails when copy from one the another excel instanceexcel vba:从另一个excel实例复制时,使用超链接公式复制单元格失败
【发布时间】:2017-08-29 16:24:58
【问题描述】:

当我复制一个包含超链接公式的单元格时,它会按照公式的格式作为 html 链接插入。这只适用于接收应用程序不是另一个 Excel 2010 实例/应用程序对象的情况。
当我将它从源实例复制到另一个实例时,它只复制纯文本。

我可以编写将 html 格式文本放入剪贴板而不是 Excel 单元格内容对象的代码吗?

【问题讨论】:

  • 请分享您当前使用的代码。
  • 这不是一个真正的代码,只是一个公式=HYPERLINK(E10;C2 & "_" & C8 & "_" & TEXT(C4;"000") )。我复制(原始文档)/粘贴(不同的实例)。我玩了一点代码,但到目前为止没有任何成功。
  • 请展示您的尝试。我没有看到在 Excel 文档之间简单地复制/粘贴链接的问题,只要您有适当的超链接。我建议在 VBA 中创建超链接,因此单元格中的输出只是一个超链接,而不是公式。这应该可以解决问题(例如 range("name").formula=application.hyperlink(blah))。
  • 尝试从一个 Excel 实例复制到另一个 Excel 实例,而不是你看到的。当您打开任务管理器时,必须有两次 EXCEL.EXE
  • 我的建议仍然有效。不要让单元格本身说出公式,而只是说出实际的超链接。公式与实际超链接之间存在脱节,其中公式是单个字符串,但实际超链接是一个包含目标和标签的数组。

标签: excel hyperlink vba


【解决方案1】:

有一种解决方法可以解决 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 工作: 但它不适用于其他应用程序:

【讨论】:

    【解决方案2】:

    如果您可以通过 VBA 创建链接,则应该可以避免需要将链接复制到剪贴板的问题。

    您将获取您正在为其创建链接的工作表并使用类似于以下内容的循环:

    With Sheets(A)
        .Hyperlinks.Add Anchor:=.Cells(1,2), Address:=.Cells(1,1), TextToDisplay:="Example" 
    End With
    

    这是一个非常笼统的建议,应该允许您查看具体示例,例如 .Cells(i,1) 和 .Cells(i,2)。

    使用完整超链接而不是显示=hyperlink()的单元格从一个工作簿复制到另一个工作簿,有望解决问题。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-03-29
      • 2022-09-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-26
      • 1970-01-01
      • 2017-02-18
      相关资源
      最近更新 更多