ExcelBanter

ExcelBanter (https://www.excelbanter.com/)
-   Excel Programming (https://www.excelbanter.com/excel-programming/)
-   -   Sort a Record Structure within a Report Routine (https://www.excelbanter.com/excel-programming/391680-sort-record-structure-within-report-routine.html)

scott56hannah

Sort a Record Structure within a Report Routine
 
Hi,
I want to be able to read some data into a record structure and then
depending on a users selection I want to be able to sort that structure
different ways..see the structure below....

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

So for instance the the data is read in sorted by ResourceName....I want to
be able to sort the record by PrimaryRole instead and then ResourceName....is
there anyway to do this programmatically or do I have to read out data to a
temporary sheet and the sort with worksheet functions ?

Thanks for any help

Tom Ogilvy

Sort a Record Structure within a Report Routine
 
Here is an example:

Type ProjectData
a As Long
b As Long
c As String
End Type

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

Sub ABC()
Dim n As Long
Dim r() As ResourceProjectData
Dim rTemp As ResourceProjectData
Dim i As Long, j As Long
n = 10
ReDim r(1 To n)
' populate the array
For i = 1 To n
PopData r(i)
Next

For i = 1 To n - 1
For j = i + 1 To n
If r(i).strPrimaryRole r(j).strPrimaryRole Then
rTemp = r(i)
r(i) = r(j)
r(j) = rTemp
End If
Next j
Next i
For i = 1 To n
Debug.Print r(i).strPrimaryRole
Next
End Sub

Sub PopData(rr As ResourceProjectData)
rr.strResourceName = Chr(Int(Rnd() * 26 + 65)) _
& Chr(Int(Rnd() * 26 + 65))
rr.strPrimaryRole = Chr(Int(Rnd() * 26 + 65))
For i = 1 To 12
rr.intResourceTotalHours(i) = Int(Rnd() * 100 + 1)
Next
For i = 1 To 500
rr.ProjectDetails(i).a = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).b = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).c = Chr(Int(Rnd() * 26 + 65))
Next
End Sub

--
Regards,
Tom Ogilvy


"scott56hannah" wrote:

Hi,
I want to be able to read some data into a record structure and then
depending on a users selection I want to be able to sort that structure
different ways..see the structure below....

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

So for instance the the data is read in sorted by ResourceName....I want to
be able to sort the record by PrimaryRole instead and then ResourceName....is
there anyway to do this programmatically or do I have to read out data to a
temporary sheet and the sort with worksheet functions ?

Thanks for any help


scott56hannah

Sort a Record Structure within a Report Routine
 
Tom,

Thanks for that I will give it a go within my routine and see if I can get
it working...

Scott

"Tom Ogilvy" wrote:

Here is an example:

Type ProjectData
a As Long
b As Long
c As String
End Type

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

Sub ABC()
Dim n As Long
Dim r() As ResourceProjectData
Dim rTemp As ResourceProjectData
Dim i As Long, j As Long
n = 10
ReDim r(1 To n)
' populate the array
For i = 1 To n
PopData r(i)
Next

For i = 1 To n - 1
For j = i + 1 To n
If r(i).strPrimaryRole r(j).strPrimaryRole Then
rTemp = r(i)
r(i) = r(j)
r(j) = rTemp
End If
Next j
Next i
For i = 1 To n
Debug.Print r(i).strPrimaryRole
Next
End Sub

Sub PopData(rr As ResourceProjectData)
rr.strResourceName = Chr(Int(Rnd() * 26 + 65)) _
& Chr(Int(Rnd() * 26 + 65))
rr.strPrimaryRole = Chr(Int(Rnd() * 26 + 65))
For i = 1 To 12
rr.intResourceTotalHours(i) = Int(Rnd() * 100 + 1)
Next
For i = 1 To 500
rr.ProjectDetails(i).a = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).b = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).c = Chr(Int(Rnd() * 26 + 65))
Next
End Sub

--
Regards,
Tom Ogilvy


"scott56hannah" wrote:

Hi,
I want to be able to read some data into a record structure and then
depending on a users selection I want to be able to sort that structure
different ways..see the structure below....

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

So for instance the the data is read in sorted by ResourceName....I want to
be able to sort the record by PrimaryRole instead and then ResourceName....is
there anyway to do this programmatically or do I have to read out data to a
temporary sheet and the sort with worksheet functions ?

Thanks for any help


scott56hannah

Sort a Record Structure within a Report Routine
 
Tom,

Thanks...I tried this last week and it worked very well and solved my
problem...thanks for your help

Scott

"scott56hannah" wrote:

Tom,

Thanks for that I will give it a go within my routine and see if I can get
it working...

Scott

"Tom Ogilvy" wrote:

Here is an example:

Type ProjectData
a As Long
b As Long
c As String
End Type

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

Sub ABC()
Dim n As Long
Dim r() As ResourceProjectData
Dim rTemp As ResourceProjectData
Dim i As Long, j As Long
n = 10
ReDim r(1 To n)
' populate the array
For i = 1 To n
PopData r(i)
Next

For i = 1 To n - 1
For j = i + 1 To n
If r(i).strPrimaryRole r(j).strPrimaryRole Then
rTemp = r(i)
r(i) = r(j)
r(j) = rTemp
End If
Next j
Next i
For i = 1 To n
Debug.Print r(i).strPrimaryRole
Next
End Sub

Sub PopData(rr As ResourceProjectData)
rr.strResourceName = Chr(Int(Rnd() * 26 + 65)) _
& Chr(Int(Rnd() * 26 + 65))
rr.strPrimaryRole = Chr(Int(Rnd() * 26 + 65))
For i = 1 To 12
rr.intResourceTotalHours(i) = Int(Rnd() * 100 + 1)
Next
For i = 1 To 500
rr.ProjectDetails(i).a = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).b = Int(Rnd() * 26 + 65)
rr.ProjectDetails(i).c = Chr(Int(Rnd() * 26 + 65))
Next
End Sub

--
Regards,
Tom Ogilvy


"scott56hannah" wrote:

Hi,
I want to be able to read some data into a record structure and then
depending on a users selection I want to be able to sort that structure
different ways..see the structure below....

Type ResourceProjectData
strResourceName As String
strPrimaryRole As String
intResourceTotalHours(1 To 12) As Integer
ProjectDetails(1 To 500) As ProjectData
End Type

So for instance the the data is read in sorted by ResourceName....I want to
be able to sort the record by PrimaryRole instead and then ResourceName....is
there anyway to do this programmatically or do I have to read out data to a
temporary sheet and the sort with worksheet functions ?

Thanks for any help



All times are GMT +1. The time now is 05:15 PM.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
ExcelBanter.com