我正在尝试设置以下范围:
Range("F3:F102,J3:J102,N3:N102,R3:R102,V3:V102,Z3:Z102,AD3:AD102,AH3:AH102,AL3:AL102,AP3:AP102,AT3:AT102,AX3:AX102,BB3:BB102,BF3:BF102,BJ3:BJ102,BN3:BN102,BR3:BR102,BV3:BV102,BZ3:BZ102,CD3:CD102")
Run Code Online (Sandbox Code Playgroud)
我尝试使用 For 循环 和 迭代地构建它Application.Union,而不是手动键入范围,因为我必须构建许多类似的范围。
Range("F3:F102,J3:J102,N3:N102,R3:R102,V3:V102,Z3:Z102,AD3:AD102,AH3:AH102,AL3:AL102,AP3:AP102,AT3:AT102,AX3:AX102,BB3:BB102,BF3:BF102,BJ3:BJ102,BN3:BN102,BR3:BR102,BV3:BV102,BZ3:BZ102,CD3:CD102")
Run Code Online (Sandbox Code Playgroud)
我得到以下范围,缺少最后一列(“CD3:CD102”):
Range("F3:F102,J3:J102,N3:N102,R3:R102,V3:V102,Z3:Z102,AD3:AD102,AH3:AH102,AL3:AL102,AP3:AP102,AT3:AT102,AX3:AX102,BB3:BB102,BF3:BF102,BJ3:BJ102,BN3:BN102,BR3:BR102,BV3:BV102,BZ3:BZ102")
Run Code Online (Sandbox Code Playgroud)
我尝试增加 For 循环中的最后一个 i 值,但得到与上面相同的范围。
我尝试使用以下代码来手动设置范围。我得到与上面相同的范围,再次缺少最后一列:
Sub Build_Range()
Dim FirstParamCol, ParamCells As Range
Dim i As Integer
Application.ScreenUpdating = False
Application.EnableEvents = False 'avoid infinite loop if any target cell is changed
Set ParamCells = Range("F3:F102") 'There 20 different "Parameter" columns, the first one being Column F (column 6)
'Note: After column F (6), the other 19 columns are 4 columns apart each (j/10, N/14, ...)
'so I looped for i = 1 to 19 and used the formula column = 6 (column F) + i * 4:
For i = 1 To 19 'There are other 19 "Parameter" columns
Set ParamCells = Application.union(ParamCells, Range(ActiveSheet.Cells(3, 6 + 4 * i), ActiveSheet.Cells(102, 6 + 4 * i)))
Next i
MsgBox ParamCells.Address 'TODO: For Debugging only
Range("B103").Value = ParamCells.Address
Exitsub:
Application.EnableEvents = True
Application.ScreenUpdating = True
End Sub
Run Code Online (Sandbox Code Playgroud)
我搜索了它是否是范围最大大小的限制或类似的东西,但我找不到任何东西。
我在 MsgBox 和 Range("B103").Value 上打印构建的 Range,仅用于调试目的(我不需要显示 Range,而是使用它/使用它)。
首先,好的信息是您构建该范围的代码可以正常工作!
\n插入 aParamCells.Select并检查它选择的内容。即使"CD3:CD102"没有出现在地址中,ParamCells.Address它也是范围的一部分ParamCells。
问题是.Address限制为 255 个字符。
如果您进行比较,您可以轻松检查
\nDebug.Print ParamCells.Address\nDebug.Print ParamCells.Address(False, False) \nRun Code Online (Sandbox Code Playgroud)\nDebug.Print ParamCells.Address\nDebug.Print ParamCells.Address(False, False) \nRun Code Online (Sandbox Code Playgroud)\n第一个字符有 253 个字符,添加CD3:CD102到字符串中将超过 255 个字符,因此它被截断。第二个没有绝对地址,因此它更短,所以最后您可以看到\xe2\x80\xa6,BZ3:BZ102,CD3:CD102它CD3:CD102实际上在范围内。
因此,任何时候您使用ParamCells它时,无论ParamCells.Address被截断为什么,它都可以在整个范围内工作。
那么问题来了,需要出示地址吗?然后你需要一些解决方法(取决于你的实际目标是什么)。或者只是为了调试您的代码然后用于ParamCells.Select检查它。
如果你想输出ParamCellsvor 验证的实际地址,可以通过循环ParamCells.Areas.
Dim AddrOfParamCells As String\nDim Area As Range\nFor Each Area In ParamCells.Areas\n AddrOfParamCells = IIf(AddrOfParamCells <> vbNullString, AddrOfParamCells & ",", vbNullString) & Area.Address\nNext Area\n\nDebug.Print AddrOfParamCells\nRun Code Online (Sandbox Code Playgroud)\n请注意,该地址只能用于验证,但不能使用它来构建范围,Set TestRange = Range(AddrOfParamCells)因为它超过 255 个字符。
| 归档时间: |
|
| 查看次数: |
88 次 |
| 最近记录: |