Home |
Search |
Today's Posts |
|
#1
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi All,
Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = ..lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = ..lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = ..lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = ..lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. |
#2
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
I'm sorry I mis-spoke
I meant to say that the script will remove the first item or first half of items selected, versus all of them. Sorry. "BigPig" wrote: Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. |
#3
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
When you remove items from a ListBox or a ComboBox (or, also, Rows from a
Range), you should work your way from the bottom up, not top down. That is, your loop should go from ListCount-1 to 0, not from 0 to ListCount-1. Otherwise, your index will get screwed up as you delete an item. For example, if you select Item(5) and delete it, what was originally Item(6) is now Item(5). If you then delete Item(6), you are deleting what was originally Item(7). All this can be avoided by starting with ListCount-1 and moving down to 0. E.g., Dim N As Long For N = .ListCount-1 To 0 Step -1 If Something(N) = True Then .RemoveItem N End If Next N -- Cordially, Chip Pearson Microsoft Most Valuable Professional Excel Product Group, 1998 - 2008 Pearson Software Consulting, LLC www.cpearson.com (email on web site) "BigPig" wrote in message ... Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. |
#4
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Chip,
Thank you very much! And for the great explanation. |
#5
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Try removing them the in reverse order...
For X = .lst_map_prop_for_trans.ListCount - 1 To 0 Step -1 Rick "BigPig" wrote in message ... Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. |
#6
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Rick,
Just read your response, thank you! "Rick Rothstein (MVP - VB)" wrote: Try removing them the in reverse order... For X = .lst_map_prop_for_trans.ListCount - 1 To 0 Step -1 Rick "BigPig" wrote in message ... Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. |
#7
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
First, I'd remove the "On error resume next" line. It can be hiding the error
from you. Second start at the bottom of the list and work your way to the top: For X = .lst_map_prop_for_trans.ListCount - 1 to 0 step -1 BigPig wrote: Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. -- Dave Peterson |
#8
![]()
Posted to microsoft.public.excel.programming
|
|||
|
|||
![]()
Hi Dave,
Thank you for your response! I hadn't thought about the "On error..." Thank you. "Dave Peterson" wrote: First, I'd remove the "On error resume next" line. It can be hiding the error from you. Second start at the bottom of the list and work your way to the top: For X = .lst_map_prop_for_trans.ListCount - 1 to 0 step -1 BigPig wrote: Hi All, Can't figure out why the following script won't remove selected items properly: With frm_map Dim X As Integer For X = 0 To .lst_map_prop_for_trans.ListCount - 1 On Error Resume Next If .lst_map_prop_for_trans.Selected(X) = True Then .lst_map_trans_to.AddItem .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 0) = .lst_map_prop_for_trans.List(X, 0) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 1) = .lst_map_prop_for_trans.List(X, 1) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 2) = .lst_map_prop_for_trans.List(X, 2) .lst_map_trans_to.List(.lst_map_trans_to.ListCount - 1, 3) = .lst_map_prop_for_trans.List(X, 3) .lst_map_prop_for_trans.RemoveItem (X) End If Next X X = X + 1 End With Other info: both listboxes are in separate frames (in the same form) and are set to multiselect. The issue is that when I select one item to "transfer" it works, but with two or more items selected the first or half of the items selected will move, but not the second or second half of the items selected. Any and all advice would be greatly appreciated. Thank you. -- Dave Peterson |
Reply |
Thread Tools | Search this Thread |
Display Modes | |
|
|
![]() |
||||
Thread | Forum | |||
Using RemoveItem with a combobox | Excel Programming | |||
RemoveItem resetting Value in ComboBox | Excel Programming | |||
MSFlexGrid RemoveItem | Excel Programming | |||
RemoveItem - ComboBox | Excel Programming | |||
.additem | Excel Programming |