我有Sheet1和Sheet2。在Sheet1中,我有一个表,其中有一列超链接,这些超链接重定向到Sheet2中定义的单元格。我想做的是自动在Sheet2中选择了我已重定向到的单元格的整行。
我已经在Sheet2代码中尝试过此操作:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Target.EntireRow.Select
End Sub
为给定的选定单元格选择整个行。但是,这不是一个很舒适的选择,因为它是一个永久选择,也就是说,当我要选择一列时,它会选择整个工作表。有什么更好的方法?
我认为重要的是要提到我不想更改行的格式以突出显示它们,我只想选择它们。
答案 0 :(得分:1)
问题是Target.EntireRow.Select
触发了另一个Worksheet_SelectionChange
事件。您需要使用Application.EnableEvents = False
来防止这种情况:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Application.EnableEvents = False
Target.EntireRow.Select
Application.EnableEvents = True
End Sub
但是也许您可以使用Worksheet_FollowHyperlink
,这可能是一个更好的选择。
最好的方法是将超链接更改为指向整行而不是单个单元格。因此,不用指向A5,而是将超链接指向5:5,然后就不需要VBA。
答案 1 :(得分:0)
FollowHyperlink
事件中,Target
是Hyperlink
对象。Address
对象的SubAddress
属性和的Hyperlink
属性与""
不同,它将指向其中的位置另一本工作簿。Address
对象的Hyperlink
属性为""
,则它将指向此工作簿中的位置。SubAddress
属性还不不包含感叹号!
,则它可以指向定义的名称。SubAddress
属性确实包含感叹号!
,则在工作表名称时它将包含单引号 '
包含空格。Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Const cSheet As Variant = "Sheet2" ' Target Worksheet Name/Index
Dim i As Integer ' Names Counter
Dim strRng As String ' Target Range Address Builder
Dim strSheet As String ' Target Worksheet Name Builder
' Check if hyperlink points to a location outside this workbook.
If Target.Address <> "" Then Exit Sub
' Assign the value of Target.SubAddress to Target Range Address Builder.
strRng = Target.SubAddress
With ThisWorkbook ' Me.Parent
' Check if hyperlink points to a named range ("!").
If InStr(strRng, "!") = 0 Then
' Loop through all names.
For i = 1 To .Names.Count
' Compare their NAME to Target Range Address Builder.
If .Names(i).Name = strRng Then
strRng = Right(.Names(i).RefersTo, Len(.Names(i).RefersTo) _
- 1) ' Remove "=".
Exit For
End If
Next
If i > .Names.Count Then Exit Sub ' Name not found.
End If
' Calculate worksheet name.
strSheet = Replace(Left(strRng, InStr(strRng, "!") - 1), "'", "")
' Check if calculated worksheet name is equal to Target Worksheet Name.
If strSheet <> .Worksheets(cSheet).Name Then Exit Sub
' Calculate the Target Range Address.
strRng = Right(strRng, Len(strRng) - InStr(strRng, "!"))
' Select the entire row of Target Range.
.Worksheets(strSheet).Range(strRng).EntireRow.Select
End With
End Sub
Option Explicit
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
ActiveCell.EntireRow.Select
End Sub