我在一个工作表中有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.
答案 0 :(得分:1)
因此,代码中最大的问题是您始终引用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)
具有相同的含义。我删除了那部分。