excel - VBA 的范围导致“运行时错误 9 下标超出范围”
问题描述
每当我超出一定数量的列时,以下代码就会失败,例如,如果我正在使用这个数组:AD2:BM,一切正常,并且它将字母彼此绑定(其原始目的)。但是,每当我尝试从 AD2:KQ 开始时,它都会通过指示失败
运行时错误 9 下标超出范围。
您能否建议如何扩展此代码中的范围(不产生错误)?问候西
Sub WL()
Dim R As Long, C As Long, X As Long, Data As Variant
Data = Range("AD2:BM" & Columns("AD:BM").Find("*", , xlValues, , xlRows, xlPrevious).Row)
For R = 1 To UBound(Data, 1)
X = -1
For C = 1 To UBound(Data, 2)
If Len(Data(R, C)) Then
X = X + 1
If X Then Data(R, C) = Data(R, C + 1) & Data(R, C)
End If
Next
Next
Range("AD2:BM2").Resize(UBound(Data)) = Data
End Sub
2.更新:
W's & L's 的所有字符串都以一个字母开头并以一个字母结尾。中间的一切都很完美。
问题是:如何将第一个极右值和第一个极左值(即单数)加倍?例如,我在下面的附图中突出显示了这些事件[不要被愚弄,每个字符串都以一个字母开头和结尾——这两种情况完全可以看到]。
我需要开始和结束 L 或 W 加倍,从 W 到 WW 和从 L 到 LL。而介于两者之间的 W 和 L 保持原样,即从一个句点移动到另一个句点并加入另一个单个字母 [就像在下面的代码中一样]。
谢谢
解决方案
您将 C 增加到 UBound(Data, 2) 但在该循环中,您希望使用 UBound 之外的 Data(r, C + 1)。
Sub WL()
Dim R As Long, C As Long, X As Long, Data As Variant
Data = Range("AD2:BM" & Columns("AD:BM").Find("*", , xlValues, , xlRows, xlPrevious).Row)
For R = 1 To UBound(Data, 1)
X = -1
For C = 1 To UBound(Data, 2) - 1 '<~~ FIX HERE!!
If Len(Data(R, C)) Then
X = X + 1
If X Then Data(R, C) = Data(R, C + 1) & Data(R, C) 'Now C+1 doesn't error
End If
Next
Next
Range("AD2:BM2").Resize(UBound(Data)) = Data
End Sub
推荐阅读
- r - 加载大型 .RData 文件时出现问题:从连接读取错误
- vue-class-components - 如何将 vue 2 类样式中的“ngx-doc-viewer”包与 typescript 项目一起使用?
- quartz - Spring Boot 石英删除作业
- arrays - 在 PowerShell 中以优雅的方式简化一列中包含重复条目的表,聚合另一列中的值
- http-status-code-400 - 运行 admin-ajax.php 返回 400
- java - Android:getHolder().setFixedSize(1920,1080) 导致屏幕分辨率问题
- javascript - 打字稿从字典和键列表构造一个子字典
- gitlab - Gitlab-runner 运行 python2 而不是 python 3
- javascript - Express-validator 测试项的数组独立
- c# - 获取复选框名称 ASP.NET Core