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

Excel VBA:用于长距离的每个循环,vba,excel,Vba,Excel,我正在为Excel工作簿中的每个循环使用一些VBA,由于某种原因,在循环到达32766行后,我得到了一个运行时错误。我认为这是一个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 AudioF

我正在为Excel工作簿中的每个循环使用一些VBA,由于某种原因,在循环到达32766行后,我得到了一个运行时错误。我认为这是一个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范围和Long范围,但是在做了大量的在线研究之后,我找不到任何东西


任何帮助都是非常感谢的,我很乐意帮助澄清任何不清楚的地方

您面临的问题与范围或迭代范围无关。这是因为可以添加到工作表中的超链接字段数量有限。限制在65530左右。因为每次迭代添加两个超链接,所以最大值为32766


您可以通过让工作表单击事件触发一些代码来解决这个问题,这些代码使用target.range动态创建URL,就像这个循环所做的那样,并将用户发送到那里。这不是一个很好的解决方法,但考虑到Excel的局限性,这是您能做的最好的方法。

您没有在任何地方声明
firstRow
lastRow
。首次使用时,这些变量可能会被解释为整数变量

将这些显式声明为
Long
,您应该不会有问题


在每个模块的顶部也使用
选项Explicit
是一个好主意-这迫使您显式声明所有变量,这样就不会发生这种类型的错误。

这很有意义,因为我花了几个小时绞尽脑汁想弄清楚这一点。所以我的电子表格是一个电话记录,每一行代表一个电话。两个超链接中的一个用作收听音频文件的方式,另一个启动单独的宏用户窗体。我可能只是使用65530链接作为“Play call”链接,然后想出一些代码在每一行插入宏按钮以启动userform。为什么会存在这种限制?我强烈建议在双击()之前使用
工作表
事件,而不是使用宏按钮。您可以通过在VB/宏编辑器中双击工作表来使用它。然后使用编写代码区域顶部的下拉列表,选择“工作表”和“双击前”。变量
Target
将保存用户双击的范围/单元格。你可以使用它格式化你的URL,然后在任何程序中打开它。我有,只是没有在这个代码snipit中。我真的很感谢大家的意见,@citizenkong。