Excel 在不允许用户选择锁定单元格的情况下保护工作表时,无法使用超链接

Excel 在不允许用户选择锁定单元格的情况下保护工作表时,无法使用超链接,excel,hyperlink,Excel,Hyperlink,我有一个工作表,它有一系列动态超链接,这些链接根据下拉菜单进行更改。只有具有下拉菜单的单元格才被解锁。我已取消选中“选择锁定单元格”,以便在我保护工作表时,用户只能选择下拉菜单。不幸的是,当我这样做时,超链接不再可用 有人知道如何解决这个问题吗 更新* 根据要求,我的动态超链接单元格的代码: =IF(ISNA(MATCH(B4,'Data Sheet'!A2:A103,0)),"",HYPERLINK(VLOOKUP(B4,'Data Sheet'!A:S,7,FALSE),VLOOKUP(B4

我有一个工作表,它有一系列动态超链接,这些链接根据下拉菜单进行更改。只有具有下拉菜单的单元格才被解锁。我已取消选中“选择锁定单元格”,以便在我保护工作表时,用户只能选择下拉菜单。不幸的是,当我这样做时,超链接不再可用

有人知道如何解决这个问题吗

更新*

根据要求,我的动态超链接单元格的代码:

=IF(ISNA(MATCH(B4,'Data Sheet'!A2:A103,0)),"",HYPERLINK(VLOOKUP(B4,'Data Sheet'!A:S,7,FALSE),VLOOKUP(B4,'Data Sheet'!A:S,5,FALSE)&" - "&VLOOKUP(B4,'Data Sheet'!A:S,6,FALSE)))
1) 单元格B4是用户选择特定选项的下拉列表。超链接将根据此选择进行更改

2) “数据表”是一个单独的表,包含数组中的所有参考数据


这基本上是说:B4中的值是否与我的数据图表中的第一列匹配?如果是这样,请使用VLOOKUP使用超链接公式将相应的URL插入公式。

如果您愿意使用VBA,可以对相关工作表使用以下代码,这将复制超链接的单击事件,并尝试以目标的本机格式打开

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If InStr(1, Target.Formula, "HYPERLINK", vbTextCompare) > 0 Then

    On Error Resume Next

    Target.Hyperlinks(1).Follow (True)

    On Error GoTo 0

End If

End Sub
更新

我想我有点工作要做。我截取了一些代码,允许翻滚操作触发一些vba。假设你的链接在A1单元。将您的链接更改为以下内容:

=IFERROR(HYPERLINK(MyMouseOverEvent("http://www.google.com"),"Hover"),"Hover")
Public Function MyMouseOverEvent(varLink As String)
    varResponse = MsgBox("Would you like to open link to: '" & varLink & "'?", vbYesNo, "Confirm")
    If varResponse = vbYes Then
        ActiveWorkbook.FollowHyperlink Address:=varLink, NewWindow:=True
    End If
End Function
如果链接返回字符串,则可以动态更改链接。现在创建一个新模块并粘贴到以下内容:

=IFERROR(HYPERLINK(MyMouseOverEvent("http://www.google.com"),"Hover"),"Hover")
Public Function MyMouseOverEvent(varLink As String)
    varResponse = MsgBox("Would you like to open link to: '" & varLink & "'?", vbYesNo, "Confirm")
    If varResponse = vbYes Then
        ActiveWorkbook.FollowHyperlink Address:=varLink, NewWindow:=True
    End If
End Function
唯一的缺点是它在鼠标悬停而不是单击时触发代码,但是弹出框将允许用户决定是否要跟随所述链接。我会继续看它,看看我是否能找到一个为点击运行的工作,但我认为它正在进步,因为即使在完全保护的情况下,它也会开火。如果有帮助,我将使用Excel 2010。

这是我对设置和要求的理解:

设置

  • 有一个带下拉菜单的受保护工作表,可更新包含VLOOKUP\HYPERLINK公式的其他单元格

  • 工作表中的所有单元格(不包括下拉菜单)都受到保护

  • 包含VLOOKUP\HYPERLINK公式的单元格的值可能等于www地址或空白,具体取决于下拉菜单的值。因此,所有超链接都指向网页或为空

  • 工作表
    EnableSelection
    设置为
    xlUnlockedCells
    ,它确定一旦工作表受到保护,“只能选择未锁定的单元格”

要求 -需要维护工作表以保护所有内容,包括VLOOKUP\HYPERLINK公式

  • 需要允许用户选择\仅激活未受保护的电池,主要是出于美观原因,并提供专业产品
此解决方案使用以下资源

  • 超链接
    功能
  • UDF
    (用户定义函数)
  • 两个
    公共变量
  • 双击事件前的
    工作表
UDF
被包装到
HYPERLINK
函数中时,它会导致 每次鼠标悬停在包含合并的
超链接的公式(UDF,[FriendlyName])
触发
UDF

我们将使用一个
公共变量
来保存
链接位置
,以便在用户做出决定后用于跟踪超链接

以及第二个
公共变量
,用于设置上次更新
链接位置
的时间

我们将模拟超链接“正常”激活的方式:

  • 用户选择单元格并单击选定单元格中的超链接

  • 相反,用户将鼠标悬停在带有超链接的单元格上(UDF将
    LinkLocation
    和时间输入公共变量),然后
    双击该单元格(触发工作表事件以跟随超链接,首先验证上次更新
    LinkLocation
    的时间,以确保它仍然是实际的,并清除
    LinkLocation
    变量)

首先,我们需要确保工作表中用于生成动态超链接的公式具有适当的结构:

=IFERROR( HYPERLINK( UDF( VLOOKUP( DropDownCell , Range , Column, False ) ), FriendlyName ), "" )
假设当前VLOOKUP\HYPERLINK公式具有以下结构: (由于未提供实际公式,因此必须基于假设工作)

我们需要将该公式更改为以下结构:

=IFERROR( HYPERLINK( UDF( VLOOKUP( DropDownCell , Range , Column, False ) ), FriendlyName ), "" )
以下步骤负责修改公式结构,使其适用于建议的解决方案。建议在名为“维护”的单独模块中复制这两个公式

并使用动态生成的超链接将此过程复制到受保护工作表的模块中

Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Now = pdTmeNow And psHypLnkLoct <> Empty Then
        ThisWorkbook.FollowHyperlink Address:=psHypLnkLoct, NewWindow:=True
    End If
End Sub
选项显式
双击之前的专用子工作表(ByVal目标作为范围,Cancel作为布尔值)
如果Now=pdTmeNow且psHypLnkLoct为空,则
ThisWorkbook.FollowHyperlink地址:=psHypLnkLoct,新窗口:=True
如果结束
端接头

你是如何生成超链接的?我想最终你必须考虑到用户交互的任何东西都必须被解锁。所以现在我们开始减轻用户改变超链接所处的危险。如果你通过<代码>超链接< /代码>公式生成,那么用户就可能会担心。更改您的公式。如果您通过VBA生成它…似乎不太重要,因为它是在每次下拉列表更改时动态生成的,用户没有机会更改脚本。我在a=hyperlink公式中使用VLOOKUP使超链接动态。防止用户更改公式不是问题。单元格n超链接是lo