VBA搜索并创建超链接

时间:2014-03-03 17:10:53

标签: excel vba

好的,所以我的excel文件中有两个工作表,HeadersInfo,两者都是按部分排序,然后是小节(尽管有点不同。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。

关于什么是错的任何想法?

2 个答案:

答案 0 :(得分:1)

这应该可以帮到你。

  1. 您的查找返回一个范围,然后您可以从中获取您的行 号。

  2. 但你也在不知不觉的床单之间跳跃。

  3. 您创建的超链接不会像您想要的那样转到其他工作表。

    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
    
  4. 编辑:我最后改变了原来的设计。现在,我没有根据数据的位置创建超链接,而是设置一个宏来刷新链接(用于添加新部分时)和一个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

相关问题