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

Vba 编写这样重复代码的最佳方法是什么?,vba,excel,Vba,Excel,下面是我的代码,它打开一个Monar实例,并使用Monar执行一些操作(Monar是一个数据挖掘工具) 我必须重复下面的代码,每次只需更改几个参数,有没有办法通过编程实现这一点?我想知道最有效的方法 a = MonarchObj.SetReportFile(rawdataS10, False) openModel = MonarchObj.SetModelFile(freeKidsModel) MonarchObj.CurrentFilter = "Under 60"

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

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

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
我正在更改的部分的一个示例是“60岁以下”、“Freekids10”以及日期和日期2字段


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

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


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


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

    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
因此,整个方法如下所示:

    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

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

    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
因此,整个方法如下所示:

    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

把这段代码放在一个方法中,如果你想更精确的话,把它放在一个类中,每次都用不同的参数对它进行分类,就像

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
 }

把这段代码放在一个方法中,如果你想更精确的话,把它放在一个类中,每次都用不同的参数对它进行分类,就像

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
 }

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

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

我知道你在使用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
我不确定确切的代码,但我想你可以沿着这条路线去达到必要的目标