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