Excel VBA存储代码以供全局使用
我已经创建了几个函数,它们共享很多相同的代码。有问题的代码从Excel VBA存储代码以供全局使用,excel,function,vba,Excel,Function,Vba,我已经创建了几个函数,它们共享很多相同的代码。有问题的代码从Dim Order\u Type As Range到Set PMethod10=Sheets(“KRONOS”)。范围(“$BK:$BK”) 我怎样才能把它放在一个全局函数或类似的东西中,以便只调用那个函数,而不是每次都再次使用整个代码 Public Function BANKING1(rev_date As Date) As Variant Dim Order_Type As Range Dim Final_Price As
Dim Order\u Type As Range
到Set PMethod10=Sheets(“KRONOS”)。范围(“$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
公共功能银行1(修订日期为日期)作为变体
Dim Order_类型作为范围
将最终价格视为范围
暗淡的配对范围
尺寸不包括版次范围
变暗PA1 As范围
变暗PMethod1作为范围
Dim PA2 As系列
Dim PayDate2 As范围
变暗PMethod2作为范围
变暗Vstatus As范围
暗队作为射程
Application.Volatile(True)
设置订单类型=纸张(“克朗”)。范围($D:$D)
设定最终价格=纸张(“克朗”)。范围($H:$H)
Set PaidAlt=图纸(“克朗”)范围($I:$I)
集合Excl_Rev=板材(“克朗”)范围($K:$K)
设置Vstatus=Sheets(“KRONOS”)。范围($DL:$DL)
设置团队=工作表(“克朗”)。范围($DO:$DO)
设置PAmount1=纸张(“克朗”)。范围($O:$O)
设置首张图纸(“克朗”)。范围($Q:$Q)
设置PMethod1=图纸(“克朗”)范围($R:$R)
Set PAmount2=纸张(“克朗”)范围($T:$T)
设置付款日期2=张(“克朗”)。范围($V:$V)
设置PMethod2=图纸(“KRONOS”)。范围($W:$W)
设置PAmount3=纸张(“克朗”)。范围($Y:$Y)
设置付款日期3=张(“克朗”)。范围($AA:$AA)
设置PMethod3=图纸(“KRONOS”)。范围($AB:$AB)
Set PAmount4=纸张(“克朗”)。范围($AD:$AD)
设置付款日期4=张(“克朗”)。范围($AF:$AF)
设置PMethod4=纸张(“克朗”)范围($AG:$AG)
Set PAmount5=板材(“克朗”)范围($AI:$AI)
设置付款日期5=张(“克朗”)。范围($AK:$AK)
设置PMethod5=图纸(“KRONOS”)。范围($AL:$AL)
Set PAmount6=床单(“克朗”)范围($AN:$AN)
设置付款日期6=张(“克朗”)。范围($AP:$AP)
设置PMethod6=图纸(“KRONOS”)。范围($AQ:$AQ)
Set PAmount7=纸张(“克朗”)范围($AS:$AS)
设置付款日期7=张(“克朗”)。范围($AU:$AU)
设置PMethod7=纸张(“克朗”)范围($AV:$AV)
Set PAmount8=纸张(“克朗”)范围($AX:$AX)
设置付款日期8=张(“克朗”)。范围($AZ:$AZ)
设置PMethod8=图纸(“KRONOS”)。范围($BA:$BA)
Set PAmount9=纸张(“克朗”)。范围($BC:$BC)
设置付款日期9=张(“克朗”)。范围($BE:$BE)
设置PMethod9=图纸(“KRONOS”).范围($BF:$BF)
Set PAmount10=纸张(“克朗”)范围($BH:$BH)
设置付款日期10=张(“克朗”)。范围($BJ:$BJ)
设置PMethod10=纸张(“克朗”)范围($BK:$BK)
BANKING1=应用程序.WorksheetFunction.SumIfs(_
PAmount1_
,小组,“9”_
,Vstatus,“拒绝”,Vstatus,“未验证”_
,不包括修订版“1”_
,PMethod1,“信用”_
,PMethod1,“修订”_
,PMethod1,“预付款”_
,PMethod1,“注销”_
,首次发布,修订日期)
端函数
您不返回任何值,因此不需要创建一个可以使用子例程的函数。然而,由于您所做的只是设置范围变量,所以您可能只需要将所有变量命名为范围,并删除所有代码。然后您可以这样引用它们:
Range("Final_Price").Value = 30
这里是a,这里是。您没有返回任何值,因此不需要生成一个可以使用子例程的函数。然而,由于您所做的只是设置范围变量,所以您可能只需要将所有变量命名为范围,并删除所有代码。然后您可以这样引用它们:
Range("Final_Price").Value = 30
这里是a,这里是。您不能在其他地方声明变量,但可以委托一个对象来保存它们 创建一个类并将以下代码放入其中:
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
那么你的功能是:
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
公共功能银行1(修订日期为日期)作为变体
应用程序。Volatile True
新一班
BANKING1=应用程序.WorksheetFunction.SumIfs(_
.PAmount1_
,.团队,“9”_
,.Vstatus,“被拒绝”,.Vstatus,“未验证”_
,不包括修订版“1”_
,.PMethod1,“信用”_
,.PMethod1,“修订”_
,.PMethod1,“预付款”_
,.PMethod1,“注销”_
,.首次发布,修订日期)
以
端函数
您的DIM
s中未列出的所有这些字段也需要列为Public
或者,可以将
Class1
的实例存储在工作表中的全局变量中,这样您就不必每次都创建新实例,但是Excel喜欢忘记全局引用。您不能在其他地方声明变量,但可以委托一个对象来保存它们
创建一个类并将以下代码放入其中:
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
那么你的功能是:
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
公共功能银行1(修订日期为日期)作为变体
应用程序。Volatile True
新一班
BANKING1=应用程序.WorksheetFunction.SumIfs(_
.PAmount1_
,.团队,“9”_
,.Vstatus,“被拒绝”,.Vstatus,“未验证”_
,不包括修订版“1”_
,.PMethod1,“信用”_
,.PMethod1,“修订”_
,.PMethod1,“预付款”_
,.PMethod1,“注销”_
,.首次发布,修订日期)
以
端函数
您的DIM
s中未列出的所有这些字段也需要列为Public
或者,可以将
Class1
的实例存储在工作表中的全局变量中,这样您就不必每次都创建新实例,但是Excel喜欢忘记全局引用。但是。。。他正在返回一些值。变量的血墙用作SumIfs
的范围参数,此BANKING1
函数是其包装器。考虑到应用程序.Volatile
@Gserg,它被设计为从工作表调用,