首页 > 解决方案 > Excel VBA用户窗体:根据工作表名称的选择(在相邻的列表框中)使用数据范围填充列表框

问题描述

我正在实验室自动化一个流程,分析师将多个工作表中的样本名称组合到流程的下一步(新工作表)中。到目前为止,我有一个带有两个列表框的用户表单;左侧的列表框可以成功提取所有相关的工作表名称(任何不是模板工作表名称的名称)。因为他们不一定都需要,所以我希望分析师能够选择他们希望能够组合的特定工作表,然后有一个宏拉取相关数据(总是在 B8:B23 范围内的数据在工作表上)并在新工作表上按顺序排列(按顺序填写 8x12 表)。

当我尝试得到这个时,我一直遇到错误,我已经用不同的结果搜索了这个问题,但似乎没有人写下我正在尝试做的事情,所以我没有得到任何工作。

我目前的想法是:在左侧列表框中,分析师选择工作表“A”。他们单击用户窗体的“添加”按钮。右侧的列表框从工作表“A”中提取“B8:B23”范围内的任何值。这可以多次完成(添加到列表中)。创建“提交”按钮后,宏会复制模板工作表(因此不必从头开始编写整个工作表),然后将这个新的数据列表粘贴到 8x12 表 (B6:M13) 中。理论上它不会粘贴空白(如果之前的 B8:B23 范围内的任何内容都是空白的)。

这是我目前为用户表单提供的所有代码(目前我的第二个列表框只是拉入选定的工作表名称,而不是我想要的数据 - 它可以将该数据吐到工作表中,我只是暂时将它放在其他地方作为测试以确保我可以将这些数据放到某个地方)。

Private Sub Add_Click()
    
Dim i As Integer
    
For i = 0 To AllSheets.ListCount - 1
If AllSheets.Selected(i) = True Then SomeSheets.AddItem AllSheets.List(i)
Next i
    
End Sub
Private Sub CommandButton1_Click()
    
'Loop through every item in the ListBox
For i = 0 To SomeSheets.ListCount - 1
    
'Check if the item was selected.
If SomeSheets.Selected(i) Then
    
'If here, means this item has been selected.
    
'Put all selected items in Column A
Worksheets("Batch Set-Up").Activate
Range("A" & Rows.Count).End(xlUp).Offset(1).Value = SomeSheets.List(i)
    
    
End If
    
Next i
    
End Sub

Private Sub CommandButton2_Click()
    
Dim answer As Integer
answer = MsgBox("Are you sure? This will cancel all selections. (OK will proceed -- cancel takes you back)", vbExclamation + vbOKCancel)
     
If answer = vbOK Then
Unload Me
      
Else
        
MsgBox ("Keep going!")
        
End If
    
End Sub
Private Sub Remove_Click()
    
Dim i As Integer
Dim counter As Integer
    
counter = 0
    
For i = 0 To SomeSheets.ListCount - 1
If SomeSheets.Selected(i - counter) Then
SomeSheets.RemoveItem (i - counter)
counter = counter + 1
End If
    
Next i
    
End Sub
Private Sub UserForm_Initialize()
    
For Each shtTemp In Worksheets
If shtTemp.Name <> "Batch Set-Up" And shtTemp.Name <> "ND Template" And shtTemp.Name <> "Diff Template" And shtTemp.Name <> "Quant Template" Then
AllSheets.AddItem shtTemp.Name
End If
Next
    
End Sub

我可以使用什么代码来使用“AllSheets”列表框中的选定变量(工作表名称)将该工作表中的数据添加到我的用户表单中的(当前名称可以更改)“SomeSheets”列表框中?

提前感谢您的任何帮助!

编辑以添加特定问题。

标签: excellistboxuserform

解决方案


推荐阅读