【发布时间】:2021-03-23 11:45:19
【问题描述】:
说明
我正在试验鼠标悬停事件。在一张纸上,我有以下布局:
在 A 列中,有 3 个命名范围:RegionOne 即 A2:A4 RegionTwo 即 A5:A7 和 RegionThree 即 A8:A10。这些范围名称在C1:C3 中列出。在D1:D3 我有以下公式:
=IFERROR(HYPERLINK(ChangeValidation(C1)),"RegionOne")(C1 在D2、D3 中更改为C2、C3)
单元格F1 是一个命名范围:NameRollover。单元格F2 是一个数据验证单元格,其中Allow: = 根据代码执行更改的源。
目的
当用户将鼠标滑过D1:D3 范围时,会发生以下情况:
- 根据条件格式突出显示单元格
- 单元格
F1(NameRollover) 更改为突出显示的单元格内容 - 单元格
F2数据验证将源更改为与单元格F1中的值匹配的命名范围 - 单元格
F2填充了数据验证列表的第一个条目
这是通过在 Sheet1 上使用以下 Private Sub 来实现的:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MyList As String
If Not Intersect(Range("F1"), Target) Is Nothing Then
With Sheet1.Range("F2")
.ClearContents
.Validation.Delete
MyList = Sheet1.Range("F1").Value
.Validation.Add Type:=xlValidateList, Formula1:="=" & MyList
End With
Sheet1.Range("F2").Value = Sheet1.Range(MyList).Cells(1, 1).Value
End If
End Sub
并且通过使用以下函数(在标准模块中)
Public Function ChangeValidation(Name As Range)
Range("NameRollover") = Name.Value
End Function
一切都很完美,除了……
我希望在翻转操作之后,数据验证单元格 (F2) 成为“活动”单元格。目前,用户必须选择该单元格,除非它已经是活动单元格。 为了实现这一目标,我在Private Sub 末尾End If 之前尝试了以下各项:
Application.Goto Sheet1.Range("F2")
Sheet1.Range("F2").Select
Sheet1.Range("F2").Activate
这些都不起作用。
问题
如何在 Private Sub 执行结束时将焦点转移到我选择的单元格 - 在这种情况下为 F2?欢迎所有建议。
【问题讨论】:
-
当
ChangeValidation函数根本不应该工作时,我很惊讶“一切正常”。从另一个单元格调用时,您无法更改 udf 中的单元格值。还有鼠标悬停事件是如何触发的?触发这些事件时运行的代码在哪里?例如什么改变了单元格“F1”来触发Worksheet_Change回调? -
You cannot change a cell value in a udf when called from another cell.@SuperSymmetry 你CAN 但不建议:) -
@SiddharthRout 超级有趣:感谢分享:)
-
当你在同一个“线程”上调用代码(不是字面意思,但它似乎是某种独立但并行的上下文)作为由超链接翻转触发的函数时,它不会始终如您所愿 - 某些操作似乎不可用,而做出选择可能就是其中之一。
-
@TimWilliams,感谢您的反馈。这是否意味着(可能)无法实现我所追求的目标 - 还是我应该继续寻找?