自动化VBA Excel宏

时间:2012-02-22 10:27:34

标签: excel-vba vba excel

我不是很擅长这个,所以我曾经手动添加这些规则,因为那些只适用于已填充的单元格。

有什么方法可以自动化吗?感谢。

Range("D22:G22").Select

    Selection.AutoFill Destination:=Range("D22:G23"), Type:=xlFillDefault

    Range("D22:G23").Select

    Range("I22").Select

    Selection.AutoFill Destination:=Range("I22:I23"), Type:=xlFillDefault

    Range("I22:I23").Select

    Range("M22:N22").Select

    Selection.AutoFill Destination:=Range("M22:N23"), Type:=xlFillDefault

    Range("M22:N23").Select

    Sheets("BN1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("BUM1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("Express").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

    Range("C20:G21").Select

    Range("K20:L20").Select

    Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault

    Range("K20:L21").Select

    Sheets("DL1").Select

    Range("C20:G20").Select

    Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault

1 个答案:

答案 0 :(得分:4)

我猜你用宏录音机录制了上面的代码。宏录制器非常适合发现模糊命令的语法,但很难整理其输出。

考虑你的最后几句话。

Sheets("Express").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault
Range("C20:G21").Select
Range("K20:L20").Select
Selection.AutoFill Destination:=Range("K20:L21"), Type:=xlFillDefault
Range("K20:L21").Select
Sheets("DL1").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault 

我可以用以下代码替换这些语句:

With Sheets("Express")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
  .Range("K20:L20").AutoFill Destination:=.Range("K20:L21"), Type:=xlFillDefault
End With
With Sheets("DL1")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
End With

我认为你会同意看起来更整洁但需要一点解释。

考虑:

With Sheets("Express")
  .Range("C20:G20").AutoFill Destination:=.Range("C20:G21"), Type:=xlFillDefault
  .Range("K20:L20").AutoFill Destination:=.Range("K20:L21"), Type:=xlFillDefault
End With

With表示我希望Sheets(“Express”)添加到以点开头的任何内容的前面,直到End With

所以这四行完全相同:

  Sheets("Express").Range("C20:G20").AutoFill Destination:=Sheets("Express").Range("C20:G21"), Type:=xlFillDefault
  Sheets("Express").Range("K20:L20").AutoFill Destination:=Sheets("Express").Range("K20:L21"), Type:=xlFillDefault

考虑:

Sheets("Express").Select
Range("C20:G20").Select
Selection.AutoFill Destination:=Range("C20:G21"), Type:=xlFillDefault
Range("C20:G21").Select

宏录制器在您执行时记录了每个步骤。您切换到“Express”工作表,选择了范围C20:G20,然后将该范围复制到一行。

最好不要选择任何东西,如果你可以避免它,因为它会减慢你的宏,并且通常会使代码更难理解。

自动填充方法的语法是:

SourceRange .AutoFill目的地:= DestinationRange ,键入:= 类型

因此可以像我一样将所有参数包含在一行中。

考虑:

Type:=xlFillDefault

宏录制器将类型设置为xlFillDefault,告诉编译器通过查看源数据来猜测所需的填充类型。在VB帮助中查找自动填充,您将获得所有填充类型的列表。选择你想要的那个。

<强>摘要

这是您所寻求的详细程度吗?如有必要,请回来提出更多问题。