Excel VBA';“s范围原因”;运行时错误9下标超出范围“;

Excel VBA';“s范围原因”;运行时错误9下标超出范围“;,excel,vba,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").F

每当我超过一定数量的列时,以下代码就会失败,例如,如果我使用这个数组: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&L的所有字符串都以一个字母开头,以一个字母结尾。 两者之间的一切都是完美的

问题是:如何将第一个极右值和第一个极左值(即单值)加倍?例如,我在下面附的照片中突出显示了这些事件[不要被愚弄,每一个字符串都以一个字母开头和结尾-这两个案例完全可见]

我需要从L或W开始,从W到WW,从L到LL。在这两者之间,W&L保持不变,即从一个周期移动到另一个周期,并加入其他单个字母[就像下面的代码一样]

谢谢


您正在将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
Sub-WL()
尺寸R为长,C为长,X为长,数据为变量
数据=范围(“AD2:BM”和列(“AD:BM”)。查找(“*”,xlValues,xlRows,xlPrevious)。行)
对于R=1到uBond(数据,1)
X=-1

对于C=1到UBound(数据,2)-1'非常感谢!你真是太棒了!真有趣,我又需要你的建议了。请参阅问题(2.)的更新。