繁体   English   中英

Excel VBA:对于长距离的每个循环

[英]Excel VBA: For Each loop for Long Range

我正在使用Excel工作簿中的一些VBA For Each循环,由于某种原因,在循环达到32,766行之后,我收到了运行时错误。 我认为这是一个Int / Long类型错误,但我似乎无法弄清楚如何解决它。 这是我当前的代码:

' Add Play Call hyperlinks
Dim Rng As Range, Cell As Range
Dim FileName As String
Dim Bureau As String
Dim CopiedFilesDirectory As String
Dim AudioFilePath As String

lastRow = Sheets("CallLog").Range("I" & Rows.Count).End(xlUp).Row

Set Rng = Sheets("CallLog").Range("I" & firstRow & ":I" & lastRow)

For Each Cell In Rng

    FileName = Range("I" & Cell.Row).Value
    MatterNumber = Replace(Range("K" & Cell.Row).Value, "/", "-")
    ContactUsername = Range("M" & Cell.Row).Value
    Bureau = Range("N" & Cell.Row).Value

    CopiedFilesDirectory = ImportCallsUserForm.CopyFilesDirectoryTextBox.Value
    AudioFilePath = CopiedFilesDirectory & Bureau & "\" & ContactUsername & "\" & MatterNumber & "\" & FileName & ".flac"

    With Worksheets("CallLog")
        .Hyperlinks.Add Anchor:=.Range("S" & Cell.Row), _
            Address:=AudioFilePath, _
            ScreenTip:="Click to play call", _
            TextToDisplay:="Play Call"
        .Hyperlinks.Add Anchor:=.Range("T" & Cell.Row), _
            Address:="", _
            ScreenTip:="Click to write a summary", _
            TextToDisplay:="Write Call Summary"
    End With

Next Cell

由于我正在使用范围,因此我认为Int Ranges和Long Ranges可能存在一种特殊类型的变量,但是在进行了广泛的在线研究后我什么都找不到。

总是会提供帮助,我们很乐意为您澄清不清楚的地方。

您面临的问题与Range或遍历它无关。 这是由于您可以添加到工作表中的超链接字段的数量的限制。 限制大约为65530。由于您在每次迭代中添加了两个超链接,因此最大可用32766。

您可以通过使worksheet_click事件触发一些代码来解决此问题,该代码使用target.range动态创建URL,如此循环那样,然后将用户发送到该URL。 这不是一个很好的解决方法,但是鉴于Excel的限制,这是您可以做的最好的事情。

您尚未在任何地方声明firstRowlastRow 首次使用时,它们可能会解释为整数变体。

将它们显式声明为Long ,您应该会很好。

在每个模块的顶部还使用Option Explicit是个好主意-这会强制您显式声明所有变量,因此不会发生此类错误。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM