Excel VBA:适用于长范围的每个循环

时间:2014-10-01 13:53:27

标签: excel vba excel-vba

我在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可能存在一种特殊类型的变量,但在进行广泛的在线研究后我找不到任何东西。

我们非常感谢任何帮助,我很乐意帮助澄清任何不清楚的事情。

2 个答案:

答案 0 :(得分:5)

您遇到的问题与范围无关或迭代它。这是由于您可以添加到工作表中的超链接字段数量的限制。限制大约是65530.由于每次迭代添加两个超链接,因此最大值为32766.

你可以解决这个问题,方法是让一个workheet_click事件激活一些使用target.range的代码来动态创建一个URL,就像这个循环正在做的那样,并将用户发送到那里。这不是一个很好的解决方法,但考虑到Excel的限制,它是你能做的最好的。

答案 1 :(得分:0)

您尚未在任何地方声明firstRowlastRow。这些可能在首次使用时被解释为整数变体。

将这些明确声明为Long,你应该没问题。

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