Vba 使用列表框从左向右移动值后保存

Vba 使用列表框从左向右移动值后保存,vba,excel,Vba,Excel,请帮我找一下列表框。 我想做的是: 我从列表框中选择了两个项目并将其向右移动。 我保存了Excel文件。我重新打开了文件,右边什么也没有 请帮忙。我在VBA中使用了以下代码: Private Sub CommandButton6_Click() Dim iCtr As Long For iCtr = 0 To Me.ListBox2.ListCount - 1 Me.ListBox1.AddItem Me.ListBox2.List(iCtr) Ne

请帮我找一下列表框。 我想做的是:
我从列表框中选择了两个项目并将其向右移动。

我保存了Excel文件。我重新打开了文件,右边什么也没有

请帮忙。我在VBA中使用了以下代码:

Private Sub CommandButton6_Click()
    Dim iCtr As Long

    For iCtr = 0 To Me.ListBox2.ListCount - 1
        Me.ListBox1.AddItem Me.ListBox2.List(iCtr)
    Next iCtr
    Me.ListBox2.Clear
End Sub





Private子工作表\u Activate()
暗淡的迈塞尔山脉
Dim rngItems As范围
设置rngItems=工作表(“主题处置”)。范围(“路线”)
Me.ListBox1.Clear
Me.ListBox2.Clear
和我一起
.LinkedCell=“”
.ListFillRange=“”
对于rngItems.细胞中的每个菌丝体
如果修剪(迈塞尔)”,则
.AddItem myCell.Value
如果结束
下一个迈塞尔
以
Me.ListBox1.MultiSelect=fmMultiSelectMulti
Me.ListBox2.MultiSelect=fmMultiSelectMulti
端接头

我给你做了一个样品。
首先设置源工作表(在本示例中,我们使用Sheet1)和用户表单,如下所示:

如您所见,我们在表1的单元格A1:A10中有初始数据或列表。
要在您创建的UserForm中显示它,您可以使用RowSource属性,如David所指出的UserForm_Initialize事件中所示。(见下文)
然后您会看到其余按钮的代码,这些按钮将选定的项目从左向右移动,反之亦然。 还可以单击“全部向左或向右移动”按钮。
基本上,我们所做的是操作Sheet1中的范围对象,然后更新每个代码块末尾的RowSource属性,使其看起来像是在操作列表框。
现在,当您保存工作表时,它将保留A1:A10和B1:B10范围内的任何值。HTH

Option Explicit






不清楚你在问什么。请考虑修改你的问题,包括更多的细节,包括截图(如果你没有足够的代表上传到这里,张贴到imgur.com,并添加链接)。包括更详细的描述,而不是简单地转储代码。当前代码似乎没有任何类似于“向左或向右移动”的内容,因此不清楚您预期会发生什么……还要注意,对表单控件的更改通常不会持续到表单的
\u Terminate
事件之后。如果您需要修改“默认值”,则必须在表单的
初始化
激活
事件处理程序中执行某些操作…@DavidZemens非常感谢您的评论。我想做的是将两个值从左框移到右框,如屏幕截图_1()所示。保存excel文件后,如果我重新打开excel文件,它将再次进入默认设置,如屏幕截图2()所示。更改尚未保存。无法使用正在使用的代码完成所需的操作。正如David所说,更改不会持续到代码终止之后。您可以做的是将所选项目传递到工作表中的某个位置,然后使用RowSource属性稍后获取它。或者更好的是,将您的代码更新为完全使用该属性。@L42非常感谢您的评论和帮助。你能告诉我在哪里加什么吗。我不是VBA方面的专家。通过阅读不同的博客和帮助,我编写了上面提到的代码。非常感谢你的帮助。
Private Sub BTN_MoveSelectedLeft_Click()
    Dim iCtr As Long

    For iCtr = 0 To Me.ListBox2.ListCount - 1
        If Me.ListBox2.Selected(iCtr) = True Then
            Me.ListBox1.AddItem Me.ListBox2.List(iCtr)
        End If
    Next iCtr

    For iCtr = Me.ListBox2.ListCount - 1 To 0 Step -1
        If Me.ListBox2.Selected(iCtr) = True Then
            Me.ListBox2.RemoveItem iCtr
        End If
    Next iCtr
End Sub
Private Sub BTN_MoveSelectedRight_Click()
    Dim iCtr As Long

    For iCtr = 0 To Me.ListBox1.ListCount - 1
        If Me.ListBox1.Selected(iCtr) = True Then
            Me.ListBox2.AddItem Me.ListBox1.List(iCtr)
        End If
    Next iCtr

    For iCtr = Me.ListBox1.ListCount - 1 To 0 Step -1
        If Me.ListBox1.Selected(iCtr) = True Then
            Me.ListBox1.RemoveItem iCtr
        End If
    Next iCtr
End Sub
Private Sub cmdOK_Click()
     Unload Me
End Sub
Private Sub Worksheet_Activate()
    Dim myCell As Range
    Dim rngItems As Range
    Set rngItems = Sheets("Subject Disposition").Range("Route")

    Me.ListBox1.Clear
    Me.ListBox2.Clear

    With Me.ListBox1
        .LinkedCell = ""
        .ListFillRange = ""
        For Each myCell In rngItems.Cells
            If Trim(myCell) <> "" Then
                .AddItem myCell.Value
            End If
        Next myCell
    End With

    Me.ListBox1.MultiSelect = fmMultiSelectMulti
    Me.ListBox2.MultiSelect = fmMultiSelectMulti
End Sub
Option Explicit
Private Sub CommandButton1_Click() 'move item right to left
    Dim rng As Range
    Dim i As Long, j As Long

    With Me.ListBox2 'right listbox
        For i = 0 To .ListCount - 1
            If .Selected(i) = True Then
                Set rng = Sheet1.Range("B1:B10").Find(.List(i), [B10])
                If Not rng Is Nothing Then
                    With Sheet1
                        If Len(.Range("A1").Value) = 0 Then
                            j = 1
                        Else
                            j = .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0).Row
                        End If
                        rng.Copy .Range("A" & j)
                        rng.Delete xlUp
                    End With
                End If
            End If
        Next
    End With

    DoEvents
    Me.ListBox1.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "A1:A10"
    Me.ListBox2.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "B1:B10"
End Sub
Private Sub CommandButton2_Click() 'move item left to right
    Dim rng As Range
    Dim i As Long, j As Long

    With Me.ListBox1 'left listbox
        For i = 0 To .ListCount - 1
            If .Selected(i) = True Then
                Set rng = Sheet1.Range("A1:A10").Find(.List(i), [A10])
                If Not rng Is Nothing Then
                    With Sheet1
                        If Len(.Range("B1").Value) = 0 Then
                            j = 1
                        Else
                            j = .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0).Row
                        End If
                        rng.Copy .Range("B" & j)
                        rng.Delete xlUp
                    End With
                End If
            End If
        Next
    End With

    DoEvents
    Me.ListBox1.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "A1:A10"
    Me.ListBox2.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "B1:B10"
End Sub
Private Sub CommandButton3_Click() 'move all to left
    Dim rng As Range

    With Sheet1
        If Me.ListBox2.ListCount = 0 Then Exit Sub
        Set rng = .Range("B1", .Range("B" & .Rows.Count).End(xlUp))
        If Len(.Range("A1").Value) = 0 Then
            rng.Copy .Range("A1")
        Else
            rng.Copy .Range("A" & .Rows.Count).End(xlUp).Offset(1, 0)
        End If
        rng.ClearContents
    End With

    DoEvents
    Me.ListBox1.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "A1:A10"
    Me.ListBox2.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "B1:B10"
End Sub
Private Sub CommandButton4_Click() 'move all to right
    Dim rng As Range

    With Sheet1
        If Me.ListBox1.ListCount = 0 Then Exit Sub
        Set rng = .Range("A1", .Range("A" & .Rows.Count).End(xlUp))
        If Len(.Range("B1").Value) = 0 Then
            rng.Copy .Range("B1")
        Else
            rng.Copy .Range("B" & .Rows.Count).End(xlUp).Offset(1, 0)
        End If
        rng.ClearContents
    End With

    DoEvents
    Me.ListBox1.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "A1:A10"
    Me.ListBox2.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "B1:B10"
End Sub
Private Sub UserForm_Initialize()
    'Initialize the left and right listbox value
    Me.ListBox1.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "A1:A10"
    Me.ListBox2.RowSource = _
        "'[" & ThisWorkbook.Name & "]" & Sheet1.Name & "'!" & "B1:B10"
End Sub