簡體   English   中英

VBA的范圍導致“運行時錯誤9下標超出范圍”

[英]VBA's range causes “Run time error 9 Subscript out of range”

每當我超出一定數量的列時,以下代碼都會失敗,例如,如果我使用的是這個數組: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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM