好的,所以我的excel文件中有两个工作表,Headers
和Info
,两者都是按部分排序,然后是小节(尽管有点不同。Headers
有第7节子节1 {而Info
有7.01节和子节X)。
所以我目前设置代码来搜索正确的部分(我通过调试知道这一点)但是根据我如何改变Search和CreateHyperlink函数,我得到运行时5错误(用于创建超链接)或1094?我想...已经有一段时间了,因为我遇到了这个错误,如果我找到了重现它的方法,我会更新。
这是错误的具体位置:
rownumber = Range("A:A").Find(search)
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), "", Sheets("Info").Cells(rownumber, 1), "", link
这就是其他一切:
'Create new Hyperlinks
Dim i As Integer
i = 18
Dim link As String
Dim section As String
Dim subsectiona As Integer
Dim subsection As String
Dim search As String
Dim rownumber As Integer
section = 0
subsection = 0
subsectiona = 0
Sheets("Headers").Select
Do While Cells(i, 3).Value <> ""
link = Cells(i, 3).Value
section = Cells(i, 1).Value
subsectiona = Cells(i, 2).Value
If subsectiona = 0 Then
subsectiona = "1"
End If
If subsectiona < 10 Then
subsection = "0" & subsectiona
Else
subsection = subsectiona
End If
search = section & "." & subsection
Sheets("Info").Select
rownumber = Range("A:A").Find(search)
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), "", Sheets("Info").Cells(rownumber, 1), "", link
i = i + 1
Loop
到目前为止,它产生运行时错误5代码,当它应该是2时,rownumber显示为7。 这是Headers文件的样子:
Section Subsection Link Description
7 1 Link Links to 7.01
7 2 Link Links to 7.02
信息文件:
Section Subsection Type Name Description
7.01 1 Blah Blah Blah
7.01 2 Blah Blah Blah
7.02 1 Blah Blah Blah
因此,来自标题的单元格C2中的“链接”一词的超链接在这种情况下导致信息的单元格A2和标题的单元格C3中的单词“链接”导致信息的单元格A4。
关于什么是错的任何想法?
答案 0 :(得分:1)
这应该可以帮到你。
您的查找返回一个范围,然后您可以从中获取您的行 号。
但你也在不知不觉的床单之间跳跃。
您创建的超链接不会像您想要的那样转到其他工作表。
Sub test()
Dim i As Integer
i = 2
Dim link As String
Dim section As String
Dim subsectiona As Integer
Dim subsection As String
Dim search As String
Dim rownumber As Integer
Dim findResult As Range
section = 0
subsection = 0
subsectiona = 0
Sheets("Headers").Select
Do While Cells(i, 3).Value <> ""
rownumber = 0
link = Cells(i, 3).Value
section = Cells(i, 1).Value
subsectiona = Cells(i, 2).Value
If subsectiona = 0 Then
subsectiona = "1"
End If
If subsectiona < 10 Then
subsection = "0" & subsectiona
Else
subsection = subsectiona
End If
search = section & "." & subsection
Set findResult = Range("Info!A1:A10000").Find(What:=search, LookIn:=xlValues, MatchCase:=False, SearchFormat:=False)
If Not findResult Is Nothing Then
rownumber = findResult.Row
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), "", Sheets("Info").Name & "!A" & rownumber, "", link
End If
i = i + 1
Loop
End Sub
编辑:我最后改变了原来的设计。现在,我没有根据数据的位置创建超链接,而是设置一个宏来刷新链接(用于添加新部分时)和一个Worksheet_FollowHyperlink事件,该事件根据单击的链接对信息表进行排序。这是我的最终代码:
刷新链接宏:
Sub Button1_Click()
Dim i As Integer
i = 17
Dim link As String
section = 0
subsection = 0
subsectiona = 0
Sheets("Headers").Select
Do While Cells(i, 3).Value <> ""
link = Cells(i, 3).Value
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), "", Sheets("Info").Name & "!A2", "", link
i = i + 1
Loop
End Sub
这是我在Headers工作表上的事件代码:
Private Sub Worksheet_FollowHyperlink(ByVal Target As Hyperlink)
Dim section As String
Dim subsectiona As Integer
Dim subsection As String
Dim Row As Integer
Dim addressa As Range
Set addressa = Target.Range
Row = addressa.Row
section = Cells(Row, 1).Value
subsectiona = Cells(Row, 2).Value
If subsectiona = 0 Then
subsectiona = "1"
End If
If subsectiona < 10 Then
subsection = "0" & subsectiona
Else
subsection = subsectiona
End If
search = section & "." & subsection
ActiveSheet.Range("$A$1:$M$741").AutoFilter Field:=1, Criteria1:=search
End Sub
非常感谢您的帮助!
答案 1 :(得分:0)
Find()返回一个范围,而不是行号:
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), _
"", Sheets("Info").Cells(rownumber, 1), "", link
应该是
Sheets("Headers").Hyperlinks.Add Sheets("Headers").Cells(i, 3), _
"", rownumber, "", link
还应添加检查以确保实际找到该术语 - 否则rownumber将为Nothing