有没有办法当用户粘贴完整的 URL 时自动将 Excel 单元格格式化为友好的超链接?

有没有办法当用户粘贴完整的 URL 时自动将 Excel 单元格格式化为友好的超链接?

我正在制作一个电子表格,想在其中粘贴一个又长又丑的链接。我希望自动格式化,以便接受这个长链接并创建一个“友好”链接。我试图省去进入链接菜单执行此操作的步骤。我不知道是否有简单的方法可以做到这一点,或者我是否需要一些宏。

谢谢!

答案1

您可以将此宏放入 ThisWorkbook 模块中:

Option Explicit


Public Sub PasteFriendlyURL()

    Dim myLink As Hyperlink
    Dim displayText As String
    
    displayText = ""
    
    displayText = InputBox("Enter the display text for your URL")
    
    If displayText = "" Then
        displayText = "Pasted Link"
    End If
    
    ActiveCell.PasteSpecial
    Set myLink = ActiveCell.Hyperlinks.Add(ActiveCell, ActiveCell.Value)
    
    myLink.TextToDisplay = displayText

End Sub

我已添加快捷方式Ctrl+ Shift+K来使用此宏,方法是通过编辑 Excel 中的宏对话框中的选项(Alt+F8将打开宏对话框):

在此处输入图片描述

因此,我复制一个链接,然后选择一个单元格并按Ctrl++ ShiftK

在此处输入图片描述

如果您复制的 URL 无效,这当然不会有好的效果。您可以选择是否在过程中写入一些错误处理。根据谁将使用它,它可能保持原样就没问题,或者您可能需要使其更强大。

答案2

FlexYourData 的答案是一个很好的例子,特别是如果你习惯使用Ctrl+K输入超链接。根据你的使用情况,你还可以编写一个 VBA 例程,每次你添加 Excel 自动格式化为超链接的文本时都会触发。我写了下面的示例,它位于 ThisWorkbook 模块中,每次你在任意工作表中添加超链接时都会触发。你可能想要调整消息文本之类的内容或将其限制在特定的工作表中。

Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Dim url As String
    Dim msg As String
    Dim txt As String
    On Error Resume Next
    url = Target.Hyperlinks(1).Address
    If Len(url) > 0 Then
        msg = "It looks like you've pasted a hyperlink. Would you like to display friendly text instead of the URL?"
        If MsgBox(msg, vbYesNo + vbDefaultButton1, "Format Hyperlink") = vbYes Then
            txt = InputBox("Friendly text to display instead of the URL:", "Format Hyperlink", url)
            Application.EnableEvents = False
            Target.Hyperlinks.Add Target, url, , , txt
            Application.EnableEvents = True
        End If
    End If
End Sub

我知道至少有一个怪癖,将超链接粘贴到多个单元格中会触发事件,但它只会编辑左上角单元格的超链接。不过,我想这并不常见。它会每当您通过在 Excel 中插入超链接创建已经友好的超链接时触发。

动态图片

相关内容