如何防止插入影响我的其余VBA代码?

时间:2018-04-04 14:27:43

标签: excel vba excel-vba

每个季度我都需要输入我们所拥有的每种产品的数量,然后将其与上一季度进行比较。

我需要能够看到过去的四个季度。但是,必须保留超过过去4个季度的任何内容(但不可见)。到目前为止,我已经通过对它们进行分组来完成此操作。这意味着如果有人想要查看所有信息,他们可以。最近一个季度的格式也需要与其他季度不同(见下图)。

为了简单起见,下面是我正在寻找的一个非常基本的例子。

https://i.stack.imgur.com/bGdyA.png

到目前为止,这就是我所拥有的。但是,这不能很好地工作,因为一旦插入新列,引用的所有列都不再正确:

Columns("D:D").Select
Selection.Insert Shift:=xlToRight, CopyOrigin:=xlFormatFromLeftOrAbove

Columns("B:C").Select
Selection.Copy
Columns("C:C").Select
ActiveSheet.Paste

Columns("D:D").Select
Selection.AutoFill Destination:=Columns("C:D"), Type:=xlFillFormats

Columns("B:B").Select
Selection.ClearContents

Range("B1").Select
ActiveCell.FormulaR1C1 = "Q2_18"
Range("L1").Select
ActiveCell.FormulaR1C1 = "=RC[-10]"
Range("U1").Select
ActiveCell.FormulaR1C1 = "=RC[-19]"


Columns("G:H").Select
Selection.Columns.Ungroup
Columns("F:H").Select
Selection.Columns.Group

主要问题似乎是插入。在这个例子中,我需要在D,N和W之前插入一个新列。但是,在列D之前插入列之后,列N然后变为O而列W变为X.我需要以插入的方式对此进行编码对其他变化没有影响,但我不确定这是否可行?

在查看任何数据之前,可能需要花费最多的时间来格式化所有表格。因此,非常感谢任何帮助!

1 个答案:

答案 0 :(得分:0)

循环中删除的示例,这比仅仅看到插入单独代码行中的其他项目(未经测试,头部代码顶部)更有意义

Dim i as long, lr as long
lr = cells(rows.count,1).end(xlup).row 'dynamic last row
For i = lr to 2 Step -2 'each loop goes BACKWARDS by counts of 2
    Rows(i).delete 'every other row, from the last row until 2 is deleted
Next i 

如果我把上面的代码读取为i = 2到lr步骤1,它会增加每次删除的行号1,这意味着我将首先删除第2行(使旧第4行现在第3行),然后删除旧的第5行(在4位),等等。

如果对插入执行此操作,则会将其他行向下推,因此每个插入都位于不正确的位置。