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
- 需要允许用户选择\仅激活未受保护的电池,主要是出于美观原因,并提供专业产品
功能超链接
(用户定义函数)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