ListBox Move Up/Down/Delete Multiple Rows

jgspencer

New Member
Joined
Apr 3, 2009
Messages
35
I have the below code that I use to move rows up or down in a control list box. The list box uses a named range for the data. Currently, if I move the selected row up, it only moves the row above the selection down and the same when I move the row down even if i select multiple rows. I want to be able to:

1. Move multiple rows up and move the row above the selection down below the selection.
2. Move multiple rows down and move the row below the selection up above the selection.
3. Clear or even delete the selected row or rows and move the below rows up.

I'm familiar with VBA but not real familiar on how to make this happen. The range I'm using has 20 rows. Any help would be greatly appreciated. Let me know if you need any more information.



Code:
Private Sub MoveDown_Click()
Dim lCurrentListIndex As Long
Dim strRowSource As String
Dim strAddress As String
Dim strSheetName As String
 
With ListBox1
  If .ListIndex < 0 Or .ListIndex = .ListCount - 1 Then Exit Sub
    lCurrentListIndex = .ListIndex + 1
    strRowSource = .RowSource
    strAddress = Range(strRowSource).Address
    strSheetName = Range(strRowSource).Parent.Name
    .RowSource = vbNullString
        With Range(strRowSource)
            .Rows(lCurrentListIndex).Cut
            .Rows(lCurrentListIndex + 2).Insert Shift:=xlDown
        End With
     Sheets(strSheetName).Range(strAddress).Name = strRowSource
    .RowSource = strRowSource
    .Selected(lCurrentListIndex) = True
End With
End Sub
 
 
Private Sub MoveUp_Click()
Dim lCurrentListIndex As Long
Dim strRowSource As String
Dim strAddress As String
Dim strSheetName As String
 
With ListBox1
  If .ListIndex < 1 Then Exit Sub
    lCurrentListIndex = .ListIndex + 1
    strRowSource = .RowSource
    strAddress = Range(strRowSource).Address
    strSheetName = Range(strRowSource).Parent.Name
    .RowSource = vbNullString
        With Range(strRowSource)
            .Rows(lCurrentListIndex).Cut
            .Rows(lCurrentListIndex - 1).Insert Shift:=xlDown
        End With
     Sheets(strSheetName).Range(strAddress).Name = strRowSource
    .RowSource = strRowSource
    .Selected(lCurrentListIndex - 2) = True
End With
End Sub
 

Excel Facts

Excel motto
Not everything I do at work revolves around Excel. Only the fun parts.
Jon,

Do you still require a solution to this?

If so.....
1 Is your list box an activex or a form control?
2 It is set as MultiSelectExtended ?
3 You want to be able to move selection up above or down below the adjacent row?
4 You want to be able to delete the selection?
5 After deletion can you tolerate a blank(s) in the list?
6 Do you really want the items deleted from the list fill range or do you just not want to see those items in the list at this time?

Tony
 
Upvote 0
Tony,

I pretty much gave up on this, but yes a solution would help me move forward with my original idea. I have an employee schedule that I created that disallows access to the ribbon or right-clicking. This control makes it harder for my managers to move employees around on the schedule. It would be great if they could simply move them or a group of people up or down.

1. It's a form control list box on a userform
2. Currently, it's set to fmMultiSelectSingle but if I change it to fmMultiSelectExtended and select 2 or more employees, the code does not move all employees, it only moves one of them
3. Correct, currently it moves one employee up or down and replaces it the adjacent row, however, I'm trying to be able to select multiple employees and move them up or down
4. Yes, I want to be able to delete the employee and then either move everything up depending on the location or replace it with the fill word (ID). I use the fill word so that the selection is not blank and confusing to the managers
5. I would rather have the fill word (ID) replace any blank sections in the list, but this is not necessarily crucial
6. I want them to be deleted because I make a copy of the current changes in the list fill range and then copy this over the current schedule

I'm not sure if all the above makes sense. Let me know if it doesn't or if you have more questions.
 
Upvote 0
Hi, This is a basic example that should do what you want.
To test:-
Enter data in column "A" rows (1 to 20).
Place listbox1 on sheet.
In list box properties place "A1:A20" as "ListFillRange"
To Run code:-
Select single or multiple Items from listBox.
Run code:-
Msgbox appears, Asking if you want the Data "Up", "Down" or "Deleted".
Select "Yes","No," Cancel" as required.
Data in Listbox "ListFillrange" and ListBox1, Sorted accordingly.
Code:
Private [COLOR=navy]Sub[/COLOR] CommandButton1_Click()
[COLOR=navy]Dim[/COLOR] TempA(1 To 20)
[COLOR=navy]Dim[/COLOR] TempB(1 To 20)
[COLOR=navy]Dim[/COLOR] a [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]Dim[/COLOR] b [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]Dim[/COLOR] Rw [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]With[/COLOR] ListBox1
    [COLOR=navy]For[/COLOR] Rw = 0 To .ListCount - 1
        [COLOR=navy]If[/COLOR] .Selected(Rw) [COLOR=navy]Then[/COLOR]
            a = a + 1
            TempA(a) = .List(Rw)
        [COLOR=navy]Else[/COLOR]
            b = b + 1
            TempB(b) = .List(Rw)
        [COLOR=navy]End[/COLOR] If
    [COLOR=navy]Next[/COLOR] Rw
[COLOR=navy]End[/COLOR] With
[COLOR=navy]If[/COLOR] b <> 0 And a <> 0 [COLOR=navy]Then[/COLOR]
    [COLOR=navy]If[/COLOR] MsgBox("Moveup=Yes" & Chr(10) & "MoveDown=No" & Chr(10) & "Cancel=Delete", vbYesNoCancel + vbQuestion, "Accept/Reject") = vbYes [COLOR=navy]Then[/COLOR]
        Range("A1").Resize(a) = Application.Transpose(TempA)
        Range("A1").Offset(a).Resize(b) = Application.Transpose(TempB)
    [COLOR=navy]ElseIf[/COLOR] vbNo [COLOR=navy]Then[/COLOR]
        Range("A1").Resize(b) = Application.Transpose(TempB)
        Range("A1").Offset(b).Resize(a) = Application.Transpose(TempA)
    [COLOR=navy]ElseIf[/COLOR] vbCancel [COLOR=navy]Then[/COLOR]
        Range("A1").Resize(b) = Application.Transpose(TempB)
    [COLOR=navy]End[/COLOR] If
[COLOR=navy]End[/COLOR] [COLOR=navy]If[/COLOR]
[COLOR=navy]End[/COLOR] [COLOR=navy]Sub[/COLOR]
Regards Mick
 
Upvote 0
MickG,

Thanks for your help. This is getting me closer but still is not functioning the way I need it too. When I select 1 or more items, the MoveUp or MoveDown either moves the entire selection to the top or the bottom respectively. The Cancel=Delete function moves the selected items to the bottom of the list instead of deleting it.

I need it to move the selected item or items up one row. For example, I have rows 1 through 5:

1
2
3
4
5

Let's say I want to move 3 and 4 up one row together, the results I'm looking for would be:

1
3
4
2
5

Your code will definitely help me along because I will also need the ability to move the selected item or items to the top or bottom. Is it possible to achieve this? Let me know if you need any more information from me.

Your help is greatly appreciated.
 
Upvote 0
Hi, Give this a try:- The code below now has another Msgbox.
If you select Items and then select "Ok" in the first Msgbox, Then the Items are moved up one row.
If you select Cancel in the First Msgbox you get the Second Msgbox with the Options as per the Original Code (Hopefully Rectified).
Code:
[COLOR=navy]Sub[/COLOR] MG16Nov58
[COLOR=navy]Dim[/COLOR] TempA(1 To 20)
[COLOR=navy]Dim[/COLOR] TempB(1 To 20)
[COLOR=navy]Dim[/COLOR] Ray
[COLOR=navy]Dim[/COLOR] A [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]Dim[/COLOR] b [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]Dim[/COLOR] Rw [COLOR=navy]As[/COLOR] [COLOR=navy]Integer[/COLOR]
[COLOR=navy]Dim[/COLOR] Ans [COLOR=navy]As[/COLOR] [COLOR=navy]String[/COLOR]
[COLOR=navy]Dim[/COLOR] Temp [COLOR=navy]As[/COLOR] [COLOR=navy]String[/COLOR]
[COLOR=navy]With[/COLOR] ListBox1
    [COLOR=navy]For[/COLOR] Rw = 0 To .ListCount - 1
        [COLOR=navy]If[/COLOR] .List(Rw) <> "" [COLOR=navy]Then[/COLOR]
        [COLOR=navy]If[/COLOR] .Selected(Rw) [COLOR=navy]Then[/COLOR]
            A = A + 1
            TempA(A) = .List(Rw)
        [COLOR=navy]Else[/COLOR]
            b = b + 1
            TempB(b) = .List(Rw)
        [COLOR=navy]End[/COLOR] If
       [COLOR=navy]End[/COLOR] If
    [COLOR=navy]Next[/COLOR] Rw
 
[COLOR=navy]If[/COLOR] b <> 0 And A <> 0 [COLOR=navy]Then[/COLOR]
    Ans = MsgBox("Moveup_OneRow=OK", vbOK + vbQuestion, "Accept/Reject")
    [COLOR=navy]If[/COLOR] Ans = vbOK [COLOR=navy]Then[/COLOR]
        Ray = Application.Transpose(Range("A1").Resize(UBound(TempA)))
            [COLOR=navy]For[/COLOR] Rw = 0 To .ListCount - 1
                [COLOR=navy]If[/COLOR] .List(Rw) <> "" [COLOR=navy]Then[/COLOR]
                    [COLOR=navy]If[/COLOR] .Selected(Rw) [COLOR=navy]Then[/COLOR]
                        Temp = Ray(Rw)
                        Ray(Rw) = .List(Rw)
                        Ray(Rw + 1) = Temp
                    [COLOR=navy]End[/COLOR] If
                [COLOR=navy]End[/COLOR] If
            [COLOR=navy]Next[/COLOR] Rw
            Range("A1").Resize(UBound(TempA)) = Application.Transpose(Ray)
    [COLOR=navy]Else[/COLOR]
        Columns("A:A").ClearContents
        Ans = MsgBox("Moveup=Yes" & Chr(10) & "MoveDown=No" & Chr(10) & "Cancel=Delete", vbYesNoCancel + vbQuestion, "Accept/Reject")
        [COLOR=navy]If[/COLOR] Ans = vbYes [COLOR=navy]Then[/COLOR]
            Range("A1").Resize(A) = Application.Transpose(TempA)
            Range("A1").Offset(A).Resize(b) = Application.Transpose(TempB)
        [COLOR=navy]ElseIf[/COLOR] Ans = vbNo [COLOR=navy]Then[/COLOR]
            Range("A1").Resize(b) = Application.Transpose(TempB)
            Range("A1").Offset(b).Resize(A) = Application.Transpose(TempA)
        [COLOR=navy]ElseIf[/COLOR] Ans = vbCancel [COLOR=navy]Then[/COLOR]
            Range("A1").Resize(b) = Application.Transpose(TempB)
        [COLOR=navy]End[/COLOR] If
    [COLOR=navy]End[/COLOR] If
[COLOR=navy]End[/COLOR] If
[COLOR=navy]End[/COLOR] [COLOR=navy]With[/COLOR]
[COLOR=navy]End[/COLOR] [COLOR=navy]Sub[/COLOR]
Regards Mick
 
Upvote 0
MickG,

This seems to be working pretty good. How hard would it be to separate these out as buttons like:

Move Up One Row
Move Down One Row
Move to Top
Move to Bottom
Delete Selection

Thanks again for your help.

Jon
 
Upvote 0
Try These:-
Code:
[COLOR="Navy"]Sub[/COLOR] Move_Up_One()
[COLOR="Navy"]Dim[/COLOR] Ray [COLOR="Navy"]As[/COLOR] Variant
[COLOR="Navy"]Dim[/COLOR] Temp [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Rw [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]With[/COLOR] ListBox1
Ray = Application.Transpose(Range("A1:A20").Value)
            [COLOR="Navy"]For[/COLOR] Rw = 0 To .ListCount - 1
                [COLOR="Navy"]If[/COLOR] .List(Rw) <> "" [COLOR="Navy"]Then[/COLOR]
                    [COLOR="Navy"]If[/COLOR] .Selected(Rw) [COLOR="Navy"]Then[/COLOR]
                        Temp = Ray(Rw)
                        Ray(Rw) = .List(Rw)
                        Ray(Rw + 1) = Temp
                    [COLOR="Navy"]End[/COLOR] If
                [COLOR="Navy"]End[/COLOR] If
            [COLOR="Navy"]Next[/COLOR] Rw
    Range("A1").Resize(UBound(Ray)) = Application.Transpose(Ray)
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]With[/COLOR]
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]Sub[/COLOR]

Code:
[COLOR="Navy"]Sub[/COLOR] Move_Down_One()
[COLOR="Navy"]Dim[/COLOR] Ray [COLOR="Navy"]As[/COLOR] Variant
[COLOR="Navy"]Dim[/COLOR] Temp [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Rw [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]With[/COLOR] ListBox1
Ray = Application.Transpose(Range("A1:A20").Value)
            [COLOR="Navy"]For[/COLOR] Rw = 0 To .ListCount - 1
                [COLOR="Navy"]If[/COLOR] .List(Rw) <> "" [COLOR="Navy"]Then[/COLOR]
                    [COLOR="Navy"]If[/COLOR] .Selected(Rw) [COLOR="Navy"]Then[/COLOR]
                        Temp = Ray(Rw + 1)
                        Ray(Rw + 1) = .List(Rw + 1)
                        Ray(Rw + 2) = Temp
                    [COLOR="Navy"]End[/COLOR] If
                [COLOR="Navy"]End[/COLOR] If
            [COLOR="Navy"]Next[/COLOR] Rw
    Range("A1").Resize(UBound(Ray)) = Application.Transpose(Ray)
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]With[/COLOR]
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]Sub[/COLOR]

Code:
[COLOR="Navy"]Sub[/COLOR] Move_Top()
[COLOR="Navy"]Dim[/COLOR] TempA(1 To 20)
[COLOR="Navy"]Dim[/COLOR] TempB(1 To 20)
[COLOR="Navy"]Dim[/COLOR] Ray
[COLOR="Navy"]Dim[/COLOR] A [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] b [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Rw [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Ans [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Temp [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]With[/COLOR] ListBox1
    [COLOR="Navy"]For[/COLOR] Rw = 0 To .ListCount - 1
        [COLOR="Navy"]If[/COLOR] .List(Rw) <> "" [COLOR="Navy"]Then[/COLOR]
        [COLOR="Navy"]If[/COLOR] .Selected(Rw) [COLOR="Navy"]Then[/COLOR]
            A = A + 1
            TempA(A) = .List(Rw)
        [COLOR="Navy"]Else[/COLOR]
            b = b + 1
            TempB(b) = .List(Rw)
        [COLOR="Navy"]End[/COLOR] If
       [COLOR="Navy"]End[/COLOR] If
    [COLOR="Navy"]Next[/COLOR] Rw
[COLOR="Navy"]If[/COLOR] b <> 0 And A <> 0 [COLOR="Navy"]Then[/COLOR]
  Columns("A:A").ClearContents
        Range("A1").Resize(A) = Application.Transpose(TempA)
            Range("A1").Offset(A).Resize(b) = Application.Transpose(TempB)
     [COLOR="Navy"]End[/COLOR] If
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]With[/COLOR]
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]Sub[/COLOR]

Code:
[COLOR="Navy"]Sub[/COLOR] Move_Bottom()
[COLOR="Navy"]Dim[/COLOR] TempA(1 To 20)
[COLOR="Navy"]Dim[/COLOR] TempB(1 To 20)
[COLOR="Navy"]Dim[/COLOR] Ray
[COLOR="Navy"]Dim[/COLOR] A [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] b [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Rw [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Ans [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Temp [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]With[/COLOR] ListBox1
    [COLOR="Navy"]For[/COLOR] Rw = 0 To .ListCount - 1
        [COLOR="Navy"]If[/COLOR] .List(Rw) <> "" [COLOR="Navy"]Then[/COLOR]
        [COLOR="Navy"]If[/COLOR] .Selected(Rw) [COLOR="Navy"]Then[/COLOR]
            A = A + 1
            TempA(A) = .List(Rw)
        [COLOR="Navy"]Else[/COLOR]
            b = b + 1
            TempB(b) = .List(Rw)
        [COLOR="Navy"]End[/COLOR] If
       [COLOR="Navy"]End[/COLOR] If
    [COLOR="Navy"]Next[/COLOR] Rw
[COLOR="Navy"]If[/COLOR] b <> 0 And A <> 0 [COLOR="Navy"]Then[/COLOR]
    Columns("A:A").ClearContents
        Range("A1").Resize(b) = Application.Transpose(TempB)
            Range("A1").Offset(b).Resize(A) = Application.Transpose(TempA)
    [COLOR="Navy"]End[/COLOR] If
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]With[/COLOR]
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]Sub[/COLOR]

Code:
[COLOR="Navy"]Sub[/COLOR] Del_Items()
[COLOR="Navy"]Dim[/COLOR] TempA(1 To 20)
[COLOR="Navy"]Dim[/COLOR] TempB(1 To 20)
[COLOR="Navy"]Dim[/COLOR] Ray
[COLOR="Navy"]Dim[/COLOR] A [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] b [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Rw [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]Integer[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Ans [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]Dim[/COLOR] Temp [COLOR="Navy"]As[/COLOR] [COLOR="Navy"]String[/COLOR]
[COLOR="Navy"]With[/COLOR] ListBox1
    [COLOR="Navy"]For[/COLOR] Rw = 0 To .ListCount - 1
        [COLOR="Navy"]If[/COLOR] .List(Rw) <> "" [COLOR="Navy"]Then[/COLOR]
        [COLOR="Navy"]If[/COLOR] .Selected(Rw) [COLOR="Navy"]Then[/COLOR]
            A = A + 1
            TempA(A) = .List(Rw)
        [COLOR="Navy"]Else[/COLOR]
            b = b + 1
            TempB(b) = .List(Rw)
        [COLOR="Navy"]End[/COLOR] If
       [COLOR="Navy"]End[/COLOR] If
    [COLOR="Navy"]Next[/COLOR] Rw
[COLOR="Navy"]If[/COLOR] b <> 0 And A <> 0 [COLOR="Navy"]Then[/COLOR]
     Columns("A:A").ClearContents
       Range("A1").Resize(b) = Application.Transpose(TempB)
[COLOR="Navy"]End[/COLOR] If
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]With[/COLOR]
[COLOR="Navy"]End[/COLOR] [COLOR="Navy"]Sub[/COLOR]
Regards Mick
 
Upvote 0
Mick,
Many thanks for a 'leg-up' with this. I had a solution in mind but the use of arrays in this way is extremely efficient. Would you believe, I had just finished adapting your code to Move Down, just before your last post came through with that same addition.

Can I just point out that your code will only move 1 Row whereas my version will also move a contiguous selection of several rows, as does your Move Up. To achieve this I have revised the list from the bottom upwards as oposed to your top down approach.
Also you will see that I have two lines annotated with '***** where I have changed the For/Next vaiable limits. This prevents the code from potentially bombing out when attempting to move the top or bottom rows the wrong way.
I have coded all moves in one routine similar to your original.

Code:
Private Sub MoveIt(Ans As String)
'based on code  MickG  MG16Nov58

Dim TempA(1 To 20)
Dim TempB(1 To 20)
Dim Ray
Dim A As Integer
Dim b As Integer
Dim Rw As Integer

Dim Temp As String

With ListBox1

    For Rw = 0 To .ListCount - 1
        If .List(Rw) <> "" Then
        If .Selected(Rw) Then
            A = A + 1
            TempA(A) = .List(Rw)
        Else
            b = b + 1
            TempB(b) = .List(Rw)
        End If
       End If
    Next Rw
 
If b <> 0 And A <> 0 Then
    If Ans = "Down" Then
        Ray = Application.Transpose(Range("A1").Resize(UBound(TempA)))
        
            For Rw = .ListCount - 2 To 0 Step -1  '*****
                If .List(Rw) <> "" Then
                    If .Selected(Rw) Then
                        Temp = Ray(Rw + 2)
                        Ray(Rw + 2) = .List(Rw)
                        Ray(Rw + 1) = Temp
                    End If
                End If
            Next Rw
            Range("A1").Resize(UBound(TempA)) = Application.Transpose(Ray)
    ElseIf Ans = "Up" Then
    Ray = Application.Transpose(Range("A1").Resize(UBound(TempA)))
    
          For Rw = 1 To .ListCount - 1 '******
                If .List(Rw) <> "" Then
                    If .Selected(Rw) Then
                        Temp = Ray(Rw)
                        Ray(Rw) = .List(Rw)
                        Ray(Rw + 1) = Temp
                    End If
                End If
            Next Rw
            Range("A1").Resize(UBound(TempA)) = Application.Transpose(Ray)
    
    Else
        Columns("A:A").ClearContents
        If Ans = "Bottom" Then
            Range("A1").Resize(A) = Application.Transpose(TempA)
            Range("A1").Offset(A).Resize(b) = Application.Transpose(TempB)
        ElseIf Ans = "Top" Then
            Range("A1").Resize(b) = Application.Transpose(TempB)
            Range("A1").Offset(b).Resize(A) = Application.Transpose(TempA)
        ElseIf Ans = "Delete" Then
            Range("A1").Resize(b) = Application.Transpose(TempB)
        End If
    End If
End If
End With

End Sub
Individual Button Controls can then be coded to pass the appropriate value of argument Ans to the MoveIt routine.

Code:
Private Sub cmdDelete_Click()
Ans = "Delete"
MoveIt (Ans)
End Sub



Private Sub cmdDown_Click()
Ans = "Down"
MoveIt (Ans)
End Sub
Private Sub cmdBottom_Click()
Ans = "Bottom"
MoveIt (Ans)
End Sub
Private Sub cmdTop_Click()
Ans = "Top"
MoveIt (Ans)
End Sub

Private Sub cmdUp_Click()
Ans = "Up"
MoveIt (Ans)
End Sub
Obviously, with a little tweaking, this is scaleable beyond the 20 item list used in this instance.

Thanks again for the lesson in arrays.

Tony
 
Upvote 0

Forum statistics

Threads
1,220,965
Messages
6,157,119
Members
451,398
Latest member
rjsteward

We've detected that you are using an adblocker.

We have a great community of people providing Excel help here, but the hosting costs are enormous. You can help keep this site running by allowing ads on MrExcel.com.
Allow Ads at MrExcel

Which adblocker are you using?

Disable AdBlock

Follow these easy steps to disable AdBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the icon in the browser’s toolbar.
2)Click on the "Pause on this site" option.
Go back

Disable AdBlock Plus

Follow these easy steps to disable AdBlock Plus

1)Click on the icon in the browser’s toolbar.
2)Click on the toggle to disable it for "mrexcel.com".
Go back

Disable uBlock Origin

Follow these easy steps to disable uBlock Origin

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back

Disable uBlock

Follow these easy steps to disable uBlock

1)Click on the icon in the browser’s toolbar.
2)Click on the "Power" button.
3)Click on the "Refresh" button.
Go back
Back
Top