Excel - VBA:Worksheet.Range.Delete是否有列数限制?

Chr*_*ris 6 excel vba excel-vba

我有一个简单的行删除一些目标列的问题.我多次使用这样的一行,但这是我第一次遇到错误.事实是它看起来很多列,因为当我在引号中删除其中的一些(大约10个)时,我不再有错误了.那么这是否意味着VBA对某个范围内的列数有限制?

MyWorksheet.Range("Q:Q,R:R,S:S,T:T,U:U,V:V,W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AL:AL,AN:AN,AP:AP,AR:AR,AT:AT,AV:AV,AX:AX,AZ:AZ,BB:BB,BD:BD,BH:BH,BJ:BJ,BL:BL,BN:BN,BP:BP,BR:BR,BT:BT,BV:BV,BX:BX,BZ:BZ,CB:CB,CF:CF,CH:CH,CJ:CJ,CN:CN,CP:CP,CR:CR,CT:CT").Delete Shift:=xlToLeft 
Run Code Online (Sandbox Code Playgroud)

这些列来自一个字符串列表,所以我知道我可以做一个For循环并逐个删除.

我是Stack Overflow的新手而不是英国人,如果我犯了任何错误,那就很抱歉.

编辑:

最初,我使用字典来存储一些特定的列,然后我用一些comas聚合字典项并将变量放在我的范围内.

For i = 1 To ColToDeleteArray.Count
    If ColToDeleteArray.Exists(i) Then
        ColToDeleteString = ColToDeleteString & ColToDeleteArray(i) & ":" & ColToDeleteArray(i) & ","
    End If
Next i

ColToDeleteString = Left(ColToDeleteString, Len(ColToDeleteString) - 1)
MyWorksheet.Range(ColToDeleteString).Delete Shift:=xlToLeft
Run Code Online (Sandbox Code Playgroud)

Gar*_*ent 5

考虑:

Sub hfsjdfh()
    Dim s As String, r As Range
    s = "Q:Q,R:R,S:S,T:T,U:U,V:V,W:W,X:X,Y:Y,Z:Z,AA:AA,AB:AB,AC:AC,AD:AD,AE:AE,AF:AF,AG:AG,AH:AH,AJ:AJ,AL:AL,AN:AN,AP:AP,AR:AR,AT:AT,AV:AV,AX:AX,AZ:AZ,BB:BB,BD:BD,BH:BH,BJ:BJ,BL:BL,BN:BN,BP:BP,BR:BR,BT:BT,BV:BV,BX:BX,BZ:BZ,CB:CB,CF:CF,CH:CH,CJ:CJ,CN:CN,CP:CP,CR:CR,CT:CT"
    arr = Split(s, ",")
    For Each a In arr
        If r Is Nothing Then
            Set r = Range(a)
        Else
            Set r = Union(r, Range(a))
        End If
    Next a
    MsgBox r.Address(0, 0)
End Sub
Run Code Online (Sandbox Code Playgroud)

在此输入图像描述

  • 因此,即使字符串太长而Range对象无法处理,它仍然可以通过使用Union().
  • 一旦创建了范围,它的地址与原始字符串相比有些紧凑.