【问题标题】:Noob - Automating VBA cut and paste, loops?Noob - 自动化 VBA 剪切和粘贴,循环?
【发布时间】:2013-07-16 18:28:34
【问题描述】:

我正在尝试格式化大型报告并希望使用宏。例如,我可能需要每隔一列插入一个新列,然后对其进行着色并插入一些数据。对于插入新列部分,而不是:

Sub Macro1()
'
' Macro1 Macro
'

'
    Columns("A:A").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("C:C").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Columns("E:E").Select
    Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    .....repeated 1000 times  :-(
End Sub

我想要更多类似的东西:

' Do this for columns A - ZZ
Columns("A:A").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
Columns(move over 2 columns).Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
'Run until Columns(":") > "ZZ:ZZ"
End Sub

我熟悉其他语言的 OOP,希望有人能对循环这些琐碎的任务有所了解!

【问题讨论】:

    标签: excel vba loops


    【解决方案1】:
    Dim rng As Range, x As Long
    
    Set rng = ActiveSheet.Range("A1:J1")
    For x = rng.Cells.Count To 1 Step -1
        rng(x).Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove
    Next x
    

    【讨论】:

    • So > Dim 声明变量 rng 和 x,rng 为值的范围,x 为 num/integer/float > rng 的值范围为 a1 到 j1
    • 我没有将 Range 的值分配给 rng,而是 Range 本身:每当在 VBA 中使用 Set 时,它就是一个正在分配的对象。这个arr = Range("A1:J1") - 或者更明确的arr = Range("A1:J1").Value - 将分配该范围内的(然后arr 将是一个二维数组)
    • 所以 1. Dim 声明变量 rng 和 x,rng 为值的范围,x 为 num/integer/float 2. rng 的值范围为 a1 到 j1 3. A (递归?) for 循环从范围 x 开始,递增 1,然后后退(向上)?? 4. 对所选单元格执行格式化,然后通过下一个 x 计数递增?
    • 对不起,起身走开了中间的问题,这是我的全部评论
    • 没有递归:循环只是从(在这种情况下)10 倒数到 1。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多