代码之家  ›  专栏  ›  技术社区  ›  Waller

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

  •  1
  • Waller  · 技术社区  · 15 年前

    我必须重复下面的代码,每次只需更改几个参数,有没有一种方法可以编程实现这一点?我想知道最有效的方法。

    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”“Freekids10”和Date&Date2字段。

    如果简单地复制和粘贴这段代码是最有效的代码,你可以告诉我走开

    4 回复  |  直到 8 年前
        1
  •  4
  •   Matt    15 年前

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

        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
    
        2
  •  0
  •   czuroski    15 年前

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

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

        3
  •  0
  •   zish    15 年前

    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
     }
    
        4
  •  0
  •   Fernando Barrocal    15 年前

    我看到你在用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
    

    我不知道确切的代码,但我想你可以沿着这条线到达必要的目标