2014-03-03 67 views
1

好吧,所以我有兩個工作表在我的excel文件中,頭和信息,並且都通過部分和子部分進行排序(albiet有點不同,頭部有第7小節1,而Info有7.01節和子部分X)。所以我現在有我的代碼設置搜索正確的部分(我通過調試知道這一點),但根據我如何改變Searcha和CreateHyperlink函數,我得到一個運行時5錯誤(用於創建超鏈接)或1094 ?我認爲......自從我出現這個錯誤以來,我已經有一段時間了,如果我找到了重現它的方法,我會更新它。VBA搜索並創建一個超鏈接

這是特定地點與錯誤:

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碼和ROWNUMBER顯示爲7時應當2. 這裏的頭文件是什麼樣子:

Section Subsection Link Description 
7   1  Link Links to 7.01 
7   2  Link Links to 7.02 

以及info文件:

Section Subsection Type Name Description 
7.01  1   Blah Blah Blah 
7.01  2   Blah Blah Blah 
7.02  1   Blah Blah Blah 

因此,從這個詞「鏈接」在頭的小區C2的超鏈接在這種情況下會導致細胞的信息和「鏈接」在小區C3字A2的頭導致信息單元格A4

有什麼不對?

回答

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 
    

編輯:我最終改變從我原來的設計了一下。現在,而不是基於數據的位置創建超鏈接我有一個宏設置爲刷新鏈接(用於添加新部分時)以及一個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 

而這裏的事件代碼我有頭工作表上:

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 

非常感謝您的幫助!

+0

是的,這工作完全謝謝你!要多看一遍,並確保我理解你所說/所做的一切。 – Patman

+0

我很好奇。假設我想對其進行更改,而不是鏈接到該單元格,而是基於「搜索」變量鏈接到表單的過濾版本。我會怎麼做?鏈接到其他解釋也非常好。 – Patman

+0

這是我的想法:超鏈接不能過濾工作表,但超鏈接可以在vba事件中進行,通過該工具可以在vba中的工作表上創建過濾器。 更好的解決方案是以編程方式創建按鈕,該按鈕執行一個函數,該函數根據下拉值對工作表進行排序。 – Archlight

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會沒有什麼