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,它被设计为从工作表调用,