首页 > 解决方案 > 在 excel 工作表的列上创建超链接以打开多层子文件夹

问题描述

我在一张纸上有这样的文件夹和子文件夹 8 层和 500K 记录:

C:\999\236\857\871 
C:\999\234\567\874 
C:\999\234\567\873 
C:\999\234\586\396 
C:\999\234\566\458

在测试工作表 A 列中有数据

236857871 
234567874 
234567873 
234586396 
234566458

我想创建一个宏来在 A 列中的现有数据上创建一个超链接,这样当我单击数据时,相应的文件夹就会打开。我从下面的 StackOverflow 中移植了一个宏。它只创建一个目的地......它无法为各个记录创建链接。我能得到帮助吗?

Sub HyperlinkNums ()
Dim WK As Workbooks
Dim sh As Worksheet
Dim i As Long
Dim lr As Long
Dim Rng As Range, Cell As Range
Set sh = Workbooks("Bigboss.xlsm").Sheets("Test")
lr = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
Set Rng = sh.Range("A5:A" & lr)

sh.range("A5").Activate

For i = 7 To lr
For Each Cell In Rng

If Cell.Value > 1 Then

   sh.Hyperlinks.Add Anchor:=Cell, Address:= _
        "C:\999\" & Left(ActiveCell, 3) & "\" & _
        Mid(ActiveCell, 4, 3) & "\" & Mid(ActiveCell, 7, 3) & "\" & _
        Right(ActiveCell, 3), TextToDisplay:=Cell.Value

End If


Next Cell
Next

End Sub.

标签: excelhyperlinkdirectorysubdirectory

解决方案


因此,您的代码中最大的问题是您总是引用ActiveCell. 您正在使用For Each...Next循环,并且您应该使用rng正在循环的对象。

您还有一个冗余循环:For i = 7 To lr. 你可以摆脱这个。

而且我不太喜欢使用半保留关键字作为变量,所以我将cell变量稍微重命名为cel. 我认为这可能是您正在寻找的:

Option Explicit

Sub HyperlinkNums()
    Dim WK As Workbooks
    Dim sh As Worksheet
    Dim lr As Long
    Dim Rng As Range, Cel As Range
    Set sh = Workbooks("Bigboss.xlsm").Sheets("Test")
    lr = sh.Range("A" & sh.Rows.Count).End(xlUp).Row
    Set Rng = sh.Range("A5:A" & lr)

    sh.Range("A5").Activate

    For Each Cel In Rng

        If Cel.Value > 1 Then

            sh.Hyperlinks.Add Cel, "C:\999\" & Left(Cel.Text, 3) & "\" & _
                    Mid(Cel.Text, 4, 3) & "\" & Right(Cel.Text, 3), _
                    TextToDisplay:=Cel.Text

        End If


    Next Cel

End Sub

另外,我对 的用法有点困惑Mid(ActiveCell, 7, 3),它似乎与Right(ActiveCell, 3). 我删除了那部分。


推荐阅读