我在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可能存在一种特殊类型的变量,但在进行广泛的在线研究后我找不到任何东西。
我们非常感谢任何帮助,我很乐意帮助澄清任何不清楚的事情。
答案 0 :(得分:5)
您遇到的问题与范围无关或迭代它。这是由于您可以添加到工作表中的超链接字段数量的限制。限制大约是65530.由于每次迭代添加两个超链接,因此最大值为32766.
你可以解决这个问题,方法是让一个workheet_click事件激活一些使用target.range的代码来动态创建一个URL,就像这个循环正在做的那样,并将用户发送到那里。这不是一个很好的解决方法,但考虑到Excel的限制,它是你能做的最好的。
答案 1 :(得分:0)
您尚未在任何地方声明firstRow
或lastRow
。这些可能在首次使用时被解释为整数变体。
将这些明确声明为Long
,你应该没问题。
最好在每个模块的顶部使用Option Explicit
- 这会强制您显式声明所有变量,因此不会发生此类错误。