【发布时间】:2014-12-31 03:38:19
【问题描述】:
我目前正在做一个项目,我想初始化两个不同的类。我正在使用集合类来存储工作表数据。
首先我想遍历类的属性;可悲的是,这在 VBA 中似乎是不可能的(没有做出一些破解的解决方案)。
下面两个函数几乎是一样的,只有一个属性不同。我能否以某种方式在 VBA 中创建一个更可重用的函数?
Private Sub PasteCMSData()
Dim PipelineCMSData As Collection
Dim WonCMSData As Collection
Dim I As Integer: I = 0
Set PipelineCMSData = CollectPipeline()
Set WonSheetName = CollectWon()
End Sub
私有函数 CollectPipeline() 作为集合
Private Function CollectPipeline() As Collection
Const StartPos As Integer = 2
Dim I As Integer: I = 0
Dim PL As cPipeline
Dim WorkbookData As Worksheet
Set CollectPipeline = New Collection
Set WorkbookData = Workbooks(WorkbookName).Worksheets(PLSheetName)
For I = StartPos To WorkbookData.UsedRange.Rows.Count
Set PL = New cPipeline
With PL
.ProjectType = WorkbookData.Cells(I, PLProjectType)
.Segment = WorkbookData.Cells(I, PLSegment)
.Customer = WorkbookData.Cells(I, PLCustomer)
.Project = WorkbookData.Cells(I, PLProject)
.Note = WorkbookData.Cells(I, PLNote)
.CRM = WorkbookData.Cells(I, PLCRM)
.Probability = WorkbookData.Cells(I, PLProbability)
.Owner = WorkbookData.Cells(I, PLOwner)
.SalesPhase = WorkbookData.Cells(I, PLSalesPhase)
.NREPotential = WorkbookData.Cells(I, PLNREPotential)
.RoyaltyPotential = WorkbookData.Cells(I, PLRoyaltyPotential)
.Defcon = WorkbookData.Cells(I, PLDefcon)
.ProjectStart = WorkbookData.Cells(I, PLProjectStart)
.ProjectDuration = WorkbookData.Cells(I, PLProjectDuration)
End With
CollectPipeline.Add PL
Next I
End Function
私有函数 CollectWon() 作为集合
Private Function CollectWon() As Collection
Const StartPos As Integer = 2
Dim I As Integer: I = 0
Dim WO As cWon
Dim WorkbookData As Worksheet
Set CollectWon = New Collection
Set WorkbookData = Workbooks(WorkbookName).Worksheets(WonSheetName)
For I = StartPos To WorkbookData.UsedRange.Rows.Count
Set WO = New cWon
With WO
.ActualCloseDate = WorkbookData.Cells(I, WOActualCloseDate)
.ProjectType = WorkbookData.Cells(I, WOProjectType)
.Segment = WorkbookData.Cells(I, WOSegment)
.Customer = WorkbookData.Cells(I, WOCustomer)
.Project = WorkbookData.Cells(I, WOProject)
.Note = WorkbookData.Cells(I, WONote)
.CRM = WorkbookData.Cells(I, WOCRM)
.Probability = WorkbookData.Cells(I, WOProbability)
.Owner = WorkbookData.Cells(I, WOOwner)
.SalesPhase = WorkbookData.Cells(I, WOSalesPhase)
.NREPotential = WorkbookData.Cells(I, WONREPotential)
.RoyaltyPotential = WorkbookData.Cells(I, WORoyaltyPotential)
.Defcon = WorkbookData.Cells(I, WODefcon)
.ProjectStart = WorkbookData.Cells(I, WOProjectStart)
.ProjectDuration = WorkbookData.Cells(I, WOProjectDuration)
End With
CollectWon.Add WO
Next I
End Function
【问题讨论】:
-
您可以在函数中添加一个参数来告诉它要创建哪种类型的对象,然后将对象变量声明为 Object 并仅在
If TypeOf obj is CWon子句中分配附加属性。您还可以使用接口类并将变量声明为该类型。