写这样重复代码的最佳方法是什么?

时间:2010-11-02 12:31:39

标签: vba excel-vba excel

下面是我的代码,它打开了一个Monarch实例,并对Monarch执行了一些操作(Monarch是一个数据挖掘工具)

我必须重复下面的代码,每次只更改几个参数,有没有办法以编程方式执行此操作?我想知道最有效的方法。

a = MonarchObj.SetReportFile(rawdataS10, False)
openModel = MonarchObj.SetModelFile(freeKidsModel)
            MonarchObj.CurrentFilter = "Under 60"


    SummerDateShow = MonarchObj.SetFieldVisible("Date2", False)
    SummerDateHide = MonarchObj.SetFieldVisible("Date", True)

ExportTOS = MonarchObj.JetExportTable(saveDir, "FreeKidsS10", 0)
MonarchObj.CloseAllDocuments

我正在改变的部分的一个例子是“Under 60”,“FreeKidsS10”和Date& Date2字段。

如果简单地复制和粘贴此代码是最有效的代码,您可以告诉我离开

4 个答案:

答案 0 :(得分:4)

您可以创建一个过程,将变量字段作为参数,然后在您复制和粘贴的任何位置调用该过程。该方法的签名将是这样的:

    Public Sub DataMiningMethod(ByVal modelFile as object, _
                                ByVal currentFilter as String, _ 
                                ByVal date1 as Boolean, _
                                ByVal date2 as Boolean, _
                                ByVal exportTableName as String)

因此整个方法看起来像这样:

Public Sub DataMiningMethod(ByVal modelFile as object, _
                            ByVal currentFilter as String, _ 
                            ByVal date1 as Boolean, _
                            ByVal date2 as Boolean, _
                            ByVal exportTableName as String)

    a = MonarchObj.SetReportFile(rawdataS10, False)
    openModel = MonarchObj.SetModelFile(modelFile )
            MonarchObj.CurrentFilter = currentFilter 


    SummerDateShow = MonarchObj.SetFieldVisible("Date2", date2 )
    SummerDateHide = MonarchObj.SetFieldVisible("Date", date1 )

    ExportTOS = MonarchObj.JetExportTable(saveDir, exportTableName , 0)
    MonarchObj.CloseAllDocuments

End Sub

答案 1 :(得分:0)

你可以创建一个用户定义的函数 - 谷歌上有很多例子 - 这里有一个 -

http://www.fontstuff.com/vba/vbatut01.htm

答案 2 :(得分:0)

将此代码放在一个方法中,如果你想更精确地放入一个类并每次都使用不同的参数对它进行分类,如

public void mymethod(string currentFilter, bool date2, bool date)
{
 a = MonarchObj.SetReportFile(rawdataS10, False)
 openModel = MonarchObj.SetModelFile(freeKidsModel)
 MonarchObj.CurrentFilter = currentFilter


 SummerDateShow = MonarchObj.SetFieldVisible("Date2", date2)
 SummerDateHide = MonarchObj.SetFieldVisible("Date", date)

 ExportTOS = MonarchObj.JetExportTable(saveDir, "FreeKidsS10", 0)
 MonarchObj.CloseAllDocuments
 }

答案 3 :(得分:0)

我看到你正在使用Excel。您可以尝试使用另一个包含数据的工作表,并使此方法一次获得每行,例如:

      A           B           C       D
1 Under60    FreeKidsS10    Date    Date2
2 Under80    FreeKidsS20    DateZ   Date3
3 Over80     FreeKidsS30    DateX   Date4

并且您将宏更改为使用类似:

a = MonarchObj.SetReportFile(rawdataS10, False)
openModel = MonarchObj.SetModelFile(freeKidsModel)
        MonarchObj.CurrentFilter = 'Sheet2!$A1'


SummerDateShow = MonarchObj.SetFieldVisible('Sheet2!$D1', False)
SummerDateHide = MonarchObj.SetFieldVisible('Sheet2!$C1', True)

ExportTOS = MonarchObj.JetExportTable(saveDir, 'Sheet2!$B1', 0)
MonarchObj.CloseAllDocuments

我不确定具体的代码,但我认为你可以沿着这条线去达到必要的目标