设置范围变量太长

问题描述 投票:1回答:1

我有下面的代码可以工作,但在其当前格式,它给出运行时错误'1004。我确信这是因为我设定的范围很长。如果我缩短它,它会起作用。怎么能这样做?我见过类似的问题但没有回答我的特殊要求。

我想在L列上运行它,然后在每个第7列运行它。

Dim A As Range, B As Range, Inte As Range, r As Range
Set A = Range("L:L,S:S,Z:Z,AG:AG,AN:AN,AU:AU,BB:BB,BI:BI,BP:BP,BW:BW,CD:CD,CK:CK,CR:CR,CY:CY,DF:DF,DM:DM,DT:DT,EA:EA,EH:EH,EO:EO,EV:EV,FC:FC,FJ:FJ,FQ:FQ,FX:FX,GE:GE,GL:GL,GS:GS,GZ:GZ,HG:HG,HN:HN,HU:HU,IB:IB,II:II,IP:IP,IW:IW,JD:JD,JK:JK,JR:JR,JY:JY,KF:KF,KM:KM,KT:KT,LA:LA,LH:LH,IP:IP,IW:IW,JD:JD,JK:JK,JR:JR,JY:JY,KF:KF,KM:KM,KT:KT,LA:LA,LH:LH")
Set Inte = Intersect(A, Target)
If Inte Is Nothing Then Exit Sub
Application.EnableEvents = False
    For Each r In Inte
        If r.Offset(0, -1).Value = "" Then
        r.Offset(0, -1).Value = Now()
        End If
    Next r
Application.EnableEvents = True

第一次问一个问题,但这个网站对我帮助很大。任何帮助赞赏

excel excel-vba variables vba
1个回答
3
投票

使用Union将设置A拆分为多个操作。

Set A = Range("L:L,S:S,Z:Z,AG:AG,AN:AN,AU:AU,BB:BB,BI:BI,BP:BP,BW:BW")
Set A = Union(A, Range("CD:CD,CK:CK,CR:CR,CY:CY,DF:DF,DM:DM,DT:DT,EA:EA,EH:EH,EO:EO,EV:EV"))
Set A = Union(A, Range("FC:FC,FJ:FJ,FQ:FQ,FX:FX,GE:GE,GL:GL,GS:GS,GZ:GZ,HG:HG,HN:HN,HU:HU,IB:IB,II:II"))
Set A = Union(A, Range("IP:IP,IW:IW,JD:JD,JK:JK,JR:JR,JY:JY,KF:KF,KM:KM,KT:KT,LA:LA,LH:LH,IP:IP,IW:IW"))
Set A = Union(A, Range("JD:JD,JK:JK,JR:JR,JY:JY,KF:KF,KM:KM,KT:KT,LA:LA,LH:LH"))

如果交错是一致的,可能更容易找到Target的列。

for each r in target
    if r.column > 11 and (r.column mod 7) = 5 then
        If r.Offset(0, -1).Value = "" Then
            r.Offset(0, -1).Value = Now()
        End If
    end if
next r
© www.soinside.com 2019 - 2024. All rights reserved.