[英]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的限制,这是您可以做的最好的事情。
您尚未在任何地方声明firstRow
或lastRow
。 首次使用时,它们可能会解释为整数变体。
将它们显式声明为Long
,您应该会很好。
在每个模块的顶部还使用Option Explicit
是个好主意-这会强制您显式声明所有变量,因此不会发生此类错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.