arrays - 更快地大范围修改(TextToDisplay)超链接的方法

标签 arrays excel vba hyperlink

我使用下面的代码来修改一万个单元格列的超链接的 TextToDisplay
它可以工作,但代码需要大约 10 秒才能完成(在高端 PC 上)。
我正在寻找一种更快的方法来完成这项任务。
我尝试将所有超链接放在一个数组上,但代码出现以下错误

 Dim rng As Range
  Set rng = ws.Range("N2", ws.Cells(Rows.Count, "N").End(xlUp))
       Dim arr
         arr = rng.Hyperlinks ‘Run-time error 450: Wrong number of arguments or invalid property assignment

这是工作代码,但速度很慢。
我也尝试关闭 screenupdating ,但没有什么区别。
提前感谢任何有用的评论和答案。
enter image description here

Option Explicit
Option Compare Text
Sub Replace_Hyperlinks_TextToDisplay_Q()
 
    Dim ws As Worksheet: Set ws = ActiveSheet
     Dim LastRow As Long
      LastRow = ws.Range("O" & Rows.Count).End(xlUp).Row
 
    Const str1 As String = "http://xxxxx/"
    Const str2 As String = "\"
 
    Dim i As Long
     For i = 2 To LastRow
       If ws.Range("O" & i).Hyperlinks.Count > 0 Then
          ws.Range("O" & i).Hyperlinks(1).TextToDisplay = Replace(Range("O" & i), str1, "")
          ws.Range("O" & i).Hyperlinks(1).TextToDisplay = Replace(Range("O" & i), str2, " - " & vbLf)
          ws.Range("O" & i).Hyperlinks(1).TextToDisplay = UCase(Left(ws.Range("O" & i).Hyperlinks(1).TextToDisplay, 1)) _
                                                         + Mid(ws.Range("O" & i).Hyperlinks(1).TextToDisplay, 2, _
                                                           Len(ws.Range("O" & i).Hyperlinks(1).TextToDisplay))
        End If
      Next i
End Sub

最佳答案

我们可以像任何其他值一样使用数组替换 Range.TextToDisplay 值。我还没有在大范围内对此进行测试,但它应该比迭代单元格要快得多。

Sub Replace_Hyperlinks_TextToDisplay_Q2()
    Application.ScreenUpdating = False
    Application.Calculation = xlCalculationManual
    
    Const str1 As String = "http://xxxxx/"
    Const str2 As String = "\"
    
    Dim Target As Range
    Dim Data As Variant
    
    With ActiveSheet
        Set Target = .Range("O1", .Cells(.Rows.Count, "O").End(xlUp))
    End With
    
    Data = Target.Value
    
    Dim r As Long
    
    For r = 1 To UBound(Data)
          Data(r, 1) = Replace(Data(r, 1), str1, "")
          Data(r, 1) = Replace(Data(r, 1), str2, " - " & vbLf)
          Data(r, 1) = UCase(Left(Data(r, 1), 1)) & Mid(Data(r, 1), 2, Len(Data(r, 1)))
    Next
    
    Target.Value = Data
    Application.Calculation = xlCalculationAutomatic
End Sub

关于arrays - 更快地大范围修改(TextToDisplay)超链接的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72173706/

相关文章:

c++ - 缓存未命中似乎无法正常工作

包含唯一 ID 号的 Excel 列

vba - Shell.namespace 不接受字符串变量,但接受字符串本身

vba - 如何在Excel VBA中锁定行之间

PHP Foreach 循环效率

javascript - 你能在 javascript 或 jquery 中从另一个数组中删除一个数组吗

arrays - 在有序数组中快速查找元素

excel - 使用 pandas dataframe 读取电子表格的最后一张

excel - 将工作表导出为新工作簿但首先删除按钮可以工作,但也会生成错误

excel - 将图表从 Excel 粘贴到 Outlook 电子邮件中