VBA存储全球使用的代码

我一直在创build几个函数,所有这些函数都有很多相同的代码。 有问题的代码是从Dim Order_Type As Range down到Set PMethod10 = Sheets("KRONOS").Range("$BK:$BK")

我怎样才能把它放在一个全局函数或类似的东西,只能调用该函数,而不是每次都使用整个代码?

 Public Function BANKING1(rev_date As Date) As Variant Dim Order_Type As Range Dim Final_Price As Range Dim PaidAlt As Range Dim Excl_Rev As Range Dim PAmount1 As Range Dim PMethod1 As Range Dim PAmount2 As Range Dim PayDate2 As Range Dim PMethod2 As Range Dim Vstatus As Range Dim Team As Range Application.Volatile (True) Set Order_Type = Sheets("KRONOS").Range("$D:$D") Set Final_Price = Sheets("KRONOS").Range("$H:$H") Set PaidAlt = Sheets("KRONOS").Range("$I:$I") Set Excl_Rev = Sheets("KRONOS").Range("$K:$K") Set Vstatus = Sheets("KRONOS").Range("$DL:$DL") Set Team = Sheets("KRONOS").Range("$DO:$DO") Set PAmount1 = Sheets("KRONOS").Range("$O:$O") Set First_PD = Sheets("KRONOS").Range("$Q:$Q") Set PMethod1 = Sheets("KRONOS").Range("$R:$R") Set PAmount2 = Sheets("KRONOS").Range("$T:$T") Set PayDate2 = Sheets("KRONOS").Range("$V:$V") Set PMethod2 = Sheets("KRONOS").Range("$W:$W") Set PAmount3 = Sheets("KRONOS").Range("$Y:$Y") Set PayDate3 = Sheets("KRONOS").Range("$AA:$AA") Set PMethod3 = Sheets("KRONOS").Range("$AB:$AB") Set PAmount4 = Sheets("KRONOS").Range("$AD:$AD") Set PayDate4 = Sheets("KRONOS").Range("$AF:$AF") Set PMethod4 = Sheets("KRONOS").Range("$AG:$AG") Set PAmount5 = Sheets("KRONOS").Range("$AI:$AI") Set PayDate5 = Sheets("KRONOS").Range("$AK:$AK") Set PMethod5 = Sheets("KRONOS").Range("$AL:$AL") Set PAmount6 = Sheets("KRONOS").Range("$AN:$AN") Set PayDate6 = Sheets("KRONOS").Range("$AP:$AP") Set PMethod6 = Sheets("KRONOS").Range("$AQ:$AQ") Set PAmount7 = Sheets("KRONOS").Range("$AS:$AS") Set PayDate7 = Sheets("KRONOS").Range("$AU:$AU") Set PMethod7 = Sheets("KRONOS").Range("$AV:$AV") Set PAmount8 = Sheets("KRONOS").Range("$AX:$AX") Set PayDate8 = Sheets("KRONOS").Range("$AZ:$AZ") Set PMethod8 = Sheets("KRONOS").Range("$BA:$BA") Set PAmount9 = Sheets("KRONOS").Range("$BC:$BC") Set PayDate9 = Sheets("KRONOS").Range("$BE:$BE") Set PMethod9 = Sheets("KRONOS").Range("$BF:$BF") Set PAmount10 = Sheets("KRONOS").Range("$BH:$BH") Set PayDate10 = Sheets("KRONOS").Range("$BJ:$BJ") Set PMethod10 = Sheets("KRONOS").Range("$BK:$BK") BANKING1 = Application.WorksheetFunction.SumIfs( _ PAmount1 _ , Team, "<>9" _ , Vstatus, "<>rejected", Vstatus, "<>unverified" _ , Excl_Rev, "<>1" _ , PMethod1, "<>Credit" _ , PMethod1, "<>Amendment" _ , PMethod1, "<>Pre-paid" _ , PMethod1, "<>Write Off" _ , First_PD, rev_date) End Function 

你不返回任何值,所以你不需要做一个函数,你可以使用一个子程序。 然而,因为你所做的全部都是设置范围variables,所以你可能只需要把它们全部命名为范围,并删除所有的代码。 然后你会这样引用它们:

 Range("Final_Price").Value = 30 

这是一个关于命名范围的video , 这里是另一个 ,这里是一个教程 。

你不能让你的variables声明别的,但你可以委托一个对象来为你保存它们。

创build一个类并把这个代码放进去:

 Option Explicit Public Order_Type As Range Public Final_Price As Range Public PaidAlt As Range Public Excl_Rev As Range Public PAmount1 As Range Public PMethod1 As Range Public PAmount2 As Range Public PayDate2 As Range Public PMethod2 As Range Public Vstatus As Range Public Team As Range Private Sub Class_Initialize() Set Order_Type = Sheets("KRONOS").Range("$D:$D") Set Final_Price = Sheets("KRONOS").Range("$H:$H") Set PaidAlt = Sheets("KRONOS").Range("$I:$I") Set Excl_Rev = Sheets("KRONOS").Range("$K:$K") Set Vstatus = Sheets("KRONOS").Range("$DL:$DL") Set Team = Sheets("KRONOS").Range("$DO:$DO") Set PAmount1 = Sheets("KRONOS").Range("$O:$O") Set First_PD = Sheets("KRONOS").Range("$Q:$Q") Set PMethod1 = Sheets("KRONOS").Range("$R:$R") Set PAmount2 = Sheets("KRONOS").Range("$T:$T") Set PayDate2 = Sheets("KRONOS").Range("$V:$V") Set PMethod2 = Sheets("KRONOS").Range("$W:$W") Set PAmount3 = Sheets("KRONOS").Range("$Y:$Y") Set PayDate3 = Sheets("KRONOS").Range("$AA:$AA") Set PMethod3 = Sheets("KRONOS").Range("$AB:$AB") Set PAmount4 = Sheets("KRONOS").Range("$AD:$AD") Set PayDate4 = Sheets("KRONOS").Range("$AF:$AF") Set PMethod4 = Sheets("KRONOS").Range("$AG:$AG") Set PAmount5 = Sheets("KRONOS").Range("$AI:$AI") Set PayDate5 = Sheets("KRONOS").Range("$AK:$AK") Set PMethod5 = Sheets("KRONOS").Range("$AL:$AL") Set PAmount6 = Sheets("KRONOS").Range("$AN:$AN") Set PayDate6 = Sheets("KRONOS").Range("$AP:$AP") Set PMethod6 = Sheets("KRONOS").Range("$AQ:$AQ") Set PAmount7 = Sheets("KRONOS").Range("$AS:$AS") Set PayDate7 = Sheets("KRONOS").Range("$AU:$AU") Set PMethod7 = Sheets("KRONOS").Range("$AV:$AV") Set PAmount8 = Sheets("KRONOS").Range("$AX:$AX") Set PayDate8 = Sheets("KRONOS").Range("$AZ:$AZ") Set PMethod8 = Sheets("KRONOS").Range("$BA:$BA") Set PAmount9 = Sheets("KRONOS").Range("$BC:$BC") Set PayDate9 = Sheets("KRONOS").Range("$BE:$BE") Set PMethod9 = Sheets("KRONOS").Range("$BF:$BF") Set PAmount10 = Sheets("KRONOS").Range("$BH:$BH") Set PayDate10 = Sheets("KRONOS").Range("$BJ:$BJ") Set PMethod10 = Sheets("KRONOS").Range("$BK:$BK") End Sub 

那么你的function:

 Public Function BANKING1(rev_date As Date) As Variant Application.Volatile True With New Class1 BANKING1 = Application.WorksheetFunction.SumIfs( _ .PAmount1 _ , .Team, "<>9" _ , .Vstatus, "<>rejected", .Vstatus, "<>unverified" _ , .Excl_Rev, "<>1" _ , .PMethod1, "<>Credit" _ , .PMethod1, "<>Amendment" _ , .PMethod1, "<>Pre-paid" _ , .PMethod1, "<>Write Off" _ , .First_PD, rev_date) End With End Function 

所有这些未列在DIM的字段都需要列为Public

或者,可以将Class1的实例存储在工作表中的全局variables中,这样就不必每次都创build新的实例,但是Excel却喜欢忘记全局引用。