VBA的范围导致“运行时错误9下标超出范围”

时间:2018-06-11 16:35:01

标签: excel vba

每当我超出一定数量的列时,以下代码都会失败,例如如果我使用的是这个数组: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介于两者之间,即从一个时期转移到另一个时期并加入其他单个字母[就像下面的代码一样]。

由于

enter image description here

1 个答案:

答案 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