每当我超出一定数量的列时,以下代码都会失败,例如如果我使用的是这个数组: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。 UPDATE:
W&的所有字符串L's以一个字母开头,以一个字母结尾。 中间的一切都是完美的。
问题是:如何将第一个极右值和第一个极左值(即单身)加倍?例如。我在下面的附图中突出显示了这些事件[不要被愚弄,每一个字符串以一个字母开头和结尾 - 这两个案例完全可见]。
我需要开始和结束L或W加倍,从W到WW,从L到LL。而W& L's介于两者之间,即从一个时期转移到另一个时期并加入其他单个字母[就像下面的代码一样]。
由于
答案 0 :(得分:3)
您正在将C递增到UBound(数据,2),但在该循环内,您希望使用UBound之外的数据(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