Reply
 
LinkBack Thread Tools Search this Thread Display Modes
  #1   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 16
Default Common Function for getting userform information

Hi,

My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?

eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis

fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series

fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2

any ideas? thx
  #2   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Common Function for getting userform information

Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox

Set lb = UserForm1.ListBox1

n = getSelected(lb, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0)
For i = 1 To UBound(arr)
s = s & vbCr & arr(i)
Next
End If

MsgBox s

End Sub

Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = -1

ReDim arr(0 To lb.ListCount - 1)
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
idx = idx + 1
arr(idx) = lb.List(i)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To idx)
End If
getSelected = idx

End Function

Regards,
Peter T

"Danny" wrote in message
...
Hi,

My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?

eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis

fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series

fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2

any ideas? thx



  #3   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 16
Default Common Function for getting userform information

On Dec 24, 6:26*pm, "Peter T" <peter_t@discussions wrote:
Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox

* * Set lb = UserForm1.ListBox1

* * n = getSelected(lb, arr)

* * If n = -1 Then
* * * * s = "no items selected"
* * Else
* * * * s = arr(0)
* * * * For i = 1 To UBound(arr)
* * * * * * s = s & vbCr & arr(i)
* * * * Next
* * End If

* * MsgBox s

End Sub

Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

* * idx = -1

* * ReDim arr(0 To lb.ListCount - 1)
* * For i = 0 To lb.ListCount - 1
* * * * If lb.Selected(i) Then
* * * * * * idx = idx + 1
* * * * * * arr(idx) = lb.List(i)
* * * * End If
* * Next
* * If idx = 0 And idx < UBound(arr) Then
* * * * ReDim Preserve arr(0 To idx)
* * End If
* * getSelected = idx

End Function

Regards,
Peter T

"Danny" wrote in message

...



Hi,


My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?


eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis


fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series


fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2


any ideas? thx- Hide quoted text -


- Show quoted text -



Hi, Thanks.

i tried to modify the second part, but failed.
mainly, the array changed from Array(x) to Array(x,2)

++++++++++++++++++
Option Base 1
Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = 0
ReDim arr(1 To lb.ListCount, 2)
For i = 1 To lb.ListCount
If lb.Selected(i - 1) = True Then
idx = idx + 1
arr(idx, 1) = lb.List(i - 1)
arr(idx, 2) = i
End If
Next
If idx = 1 And idx < UBound(arr) Then
ReDim Preserve arr(1 To idx)
End If
getSelected = idx

End Function
++++++++++++++++++
  #4   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,934
Default Common Function for getting userform information

From the Remarks section of the help file for ReDim...

"If you use the Preserve keyword, you can resize
only the last array dimension and you can't change
the number of dimensions at all."

--
Rick (MVP - Excel)


"Danny" wrote in message
...
On Dec 24, 6:26 pm, "Peter T" <peter_t@discussions wrote:
Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox

Set lb = UserForm1.ListBox1

n = getSelected(lb, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0)
For i = 1 To UBound(arr)
s = s & vbCr & arr(i)
Next
End If

MsgBox s

End Sub

Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = -1

ReDim arr(0 To lb.ListCount - 1)
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
idx = idx + 1
arr(idx) = lb.List(i)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To idx)
End If
getSelected = idx

End Function

Regards,
Peter T

"Danny" wrote in message

...



Hi,


My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?


eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis


fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series


fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2


any ideas? thx- Hide quoted text -


- Show quoted text -



Hi, Thanks.

i tried to modify the second part, but failed.
mainly, the array changed from Array(x) to Array(x,2)

++++++++++++++++++
Option Base 1
Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = 0
ReDim arr(1 To lb.ListCount, 2)
For i = 1 To lb.ListCount
If lb.Selected(i - 1) = True Then
idx = idx + 1
arr(idx, 1) = lb.List(i - 1)
arr(idx, 2) = i
End If
Next
If idx = 1 And idx < UBound(arr) Then
ReDim Preserve arr(1 To idx)
End If
getSelected = idx

End Function
++++++++++++++++++

  #5   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 16
Default Common Function for getting userform information

On Dec 25, 3:53*am, "Rick Rothstein"
wrote:
From the Remarks section of the help file for ReDim...

"If you use the Preserve keyword, you can resize
*only the last array dimension and you can't change
*the number of dimensions at all."

--
Rick (MVP - Excel)

"Danny" wrote in message

...
On Dec 24, 6:26 pm, "Peter T" <peter_t@discussions wrote:





Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox


Set lb = UserForm1.ListBox1


n = getSelected(lb, arr)


If n = -1 Then
s = "no items selected"
Else
s = arr(0)
For i = 1 To UBound(arr)
s = s & vbCr & arr(i)
Next
End If


MsgBox s


End Sub


Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long


idx = -1


ReDim arr(0 To lb.ListCount - 1)
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
idx = idx + 1
arr(idx) = lb.List(i)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To idx)
End If
getSelected = idx


End Function


Regards,
Peter T


"Danny" wrote in message


....


Hi,


My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?


eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis


fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series


fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2


any ideas? thx- Hide quoted text -


- Show quoted text -


Hi, Thanks.

i tried to modify the second part, but failed.
mainly, the array changed from Array(x) to Array(x,2)

++++++++++++++++++
Option Base 1
Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

* * idx = 0
* * ReDim arr(1 To lb.ListCount, 2)
* * For i = 1 To lb.ListCount
* * * * If lb.Selected(i - 1) = True Then
* * * * * * idx = idx + 1
* * * * * * arr(idx, 1) = lb.List(i - 1)
* * * * * * arr(idx, 2) = i
* * * * End If
* * Next
* * If idx = 1 And idx < UBound(arr) Then
* * * * ReDim Preserve arr(1 To idx)
* * End If
* * getSelected = idx

End Function
++++++++++++++++++- Hide quoted text -

- Show quoted text -


Hi, Thanks.

then i will separate this set array to 2.

br,
Danny


  #6   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Common Function for getting userform information


"Danny" wrote in message
...
On Dec 24, 6:26 pm, "Peter T" <peter_t@discussions wrote:
Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox

Set lb = UserForm1.ListBox1

n = getSelected(lb, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0)
For i = 1 To UBound(arr)
s = s & vbCr & arr(i)
Next
End If

MsgBox s

End Sub

Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = -1

ReDim arr(0 To lb.ListCount - 1)
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
idx = idx + 1
arr(idx) = lb.List(i)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To idx)
End If
getSelected = idx

End Function

Regards,
Peter T

"Danny" wrote in message

...



Hi,


My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?


eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis


fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series


fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2


any ideas? thx- Hide quoted text -


- Show quoted text -



Hi, Thanks.

i tried to modify the second part, but failed.
mainly, the array changed from Array(x) to Array(x,2)

++++++++++++++++++
Option Base 1
Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = 0
ReDim arr(1 To lb.ListCount, 2)
For i = 1 To lb.ListCount
If lb.Selected(i - 1) = True Then
idx = idx + 1
arr(idx, 1) = lb.List(i - 1)
arr(idx, 2) = i
End If
Next
If idx = 1 And idx < UBound(arr) Then
ReDim Preserve arr(1 To idx)
End If
getSelected = idx

End Function
++++++++++++++++++

================================================== ======


As Rick says you can only Redim Preserve the last dimension. Here's same
again adapted to a get selected items from a two column multiselect Listbox

Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lbx As MSForms.ListBox

Set lbx = UserForm1.ListBox1 ' assumes 2-columns

n = getSelected(lbx, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0, 0) & vbTab & arr(1, 0)
For i = 1 To UBound(arr, 2)
s = s & vbCr & arr(0, i) & vbTab & arr(1, i)
Next
End If

MsgBox s

End Sub

Function getSelected(lbx As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long
' to get an array of seleted items from
' a Multiselect, 2-column ListBox

idx = -1

ReDim arr(0 To 1, 0 To lbx.ListCount - 1)
For i = 0 To lbx.ListCount - 1
If lbx.Selected(i) Then
idx = idx + 1
arr(0, idx) = lbx.List(i, 0)
arr(1, idx) = lbx.List(i, 1)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To 1, 0 To idx)
End If
getSelected = idx

End Function


This is all zero-base, adapt if you particularly want to change to one-base.

Regards,
Peter T


  #7   Report Post  
Posted to microsoft.public.excel.programming
external usenet poster
 
Posts: 5,600
Default Common Function for getting userform information


"Peter T" <peter_t@discussions wrote in message
...

"Danny" wrote in message
...
On Dec 24, 6:26 pm, "Peter T" <peter_t@discussions wrote:
Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lb As MSForms.ListBox

Set lb = UserForm1.ListBox1

n = getSelected(lb, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0)
For i = 1 To UBound(arr)
s = s & vbCr & arr(i)
Next
End If

MsgBox s

End Sub

Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = -1

ReDim arr(0 To lb.ListCount - 1)
For i = 0 To lb.ListCount - 1
If lb.Selected(i) Then
idx = idx + 1
arr(idx) = lb.List(i)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To idx)
End If
getSelected = idx

End Function

Regards,
Peter T

"Danny" wrote in message

...



Hi,


My macro has a lot of userform and multi listbox within userform (each
userform has unique name). how can I use a function to get the
selected items in different listbox?


eg.
fmMyPlot.lb_Prof_xAxis
fmMyPlot.lb_Prof_y1Axis


fmMyPlot.lb_Std_Gp
fmMyPlot.lb_Std_Series


fmMyTemplate.lb_temp1
fmMyTemplate.lb_temp2


any ideas? thx- Hide quoted text -


- Show quoted text -



Hi, Thanks.

i tried to modify the second part, but failed.
mainly, the array changed from Array(x) to Array(x,2)

++++++++++++++++++
Option Base 1
Function getSelected(lb As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long

idx = 0
ReDim arr(1 To lb.ListCount, 2)
For i = 1 To lb.ListCount
If lb.Selected(i - 1) = True Then
idx = idx + 1
arr(idx, 1) = lb.List(i - 1)
arr(idx, 2) = i
End If
Next
If idx = 1 And idx < UBound(arr) Then
ReDim Preserve arr(1 To idx)
End If
getSelected = idx

End Function
++++++++++++++++++

================================================== ======


As Rick says you can only Redim Preserve the last dimension. Here's same
again adapted to a get selected items from a two column multiselect
Listbox

Sub Test()
Dim i As Long, n As Long
Dim s As String
Dim arr
Dim lbx As MSForms.ListBox

Set lbx = UserForm1.ListBox1 ' assumes 2-columns

n = getSelected(lbx, arr)

If n = -1 Then
s = "no items selected"
Else
s = arr(0, 0) & vbTab & arr(1, 0)
For i = 1 To UBound(arr, 2)
s = s & vbCr & arr(0, i) & vbTab & arr(1, i)
Next
End If

MsgBox s

End Sub

Function getSelected(lbx As MSForms.ListBox, arr) As Long
Dim i As Long, idx As Long
' to get an array of seleted items from
' a Multiselect, 2-column ListBox

idx = -1

ReDim arr(0 To 1, 0 To lbx.ListCount - 1)
For i = 0 To lbx.ListCount - 1
If lbx.Selected(i) Then
idx = idx + 1
arr(0, idx) = lbx.List(i, 0)
arr(1, idx) = lbx.List(i, 1)
End If
Next
If idx = 0 And idx < UBound(arr) Then
ReDim Preserve arr(0 To 1, 0 To idx)
End If
getSelected = idx

End Function


This is all zero-base, adapt if you particularly want to change to
one-base.

Regards,
Peter T

================================================== ========

Looks like I misunderstood the purpose of your 2d array, I assumed it was
because you have 2-column Listboxes. But reading again I see you have this -

arr(idx, 1) = lb.List(i - 1)
arr(idx, 2) = i

I don't know what you are attempting to do and suspect my revised demo is
not what you want.

Regards,
Peter T


Reply
Thread Tools Search this Thread
Search this Thread:

Advanced Search
Display Modes

Posting Rules

Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On


Similar Threads
Thread Thread Starter Forum Replies Last Post
MODE function where there are no common functions. DJFudd Excel Discussion (Misc queries) 1 July 22nd 09 03:41 AM
Need help on Automating a common function Stumped Non-IT-ian Excel Discussion (Misc queries) 5 May 6th 09 09:09 PM
Saving information between uses? (Userform) PaulW Excel Programming 1 March 30th 07 02:31 PM
Any function to determine the smallest common factor from a list? Eric Excel Discussion (Misc queries) 4 December 10th 06 07:47 PM
Common format for Labels in Userform [email protected] Excel Programming 3 May 13th 04 11:14 AM


All times are GMT +1. The time now is 12:20 PM.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 ExcelBanter.
The comments are property of their posters.
 

About Us

"It's about Microsoft Excel"