1。背景&目的
我创建了新的用户表单来显示Excel表格中的数据(" DATA")和多列的表格(" Tab1"),如下图所示。
在我的表单(" TaskMngUserForm")中,点击"任务列表"按钮,Tab1中的所有数据将显示在Listbox1上,如下所示:
此外,我还要添加一个动作事件" Listbox1_Click()"那:返回"数据"与所选索引对应的表格行,该索引从所选ListBox1行的第2列获得。
2。使用代码
这是我的使用代码。
'4. Event for "Tasks List" button
Private Sub Button_TaskList_Click()
ListBox1.ColumnWidths = "20;100;80;100;60;100;80;80;80;200;200;200"
ListBox1.ColumnCount = 12
With ListBox1
'.ColumnHeads = True
.List = Sheets("DATA").Range("B2").CurrentRegion.Value
.RemoveItem (0)
.ColumnCount = Sheets("DATA").Cells(2, 2).CurrentRegion.Columns.Count
End With
Application.ScreenUpdating = True
Label25.Caption = "Total Tasks: " & (Worksheets("DATA").UsedRange.Rows.Count - 1)
End Sub
'6. Event for "Click Listbox" Action
Private Sub ListBox1_Click()
Dim strAddress As String
Dim dataSht As Worksheet
With Me
If .ListBox1.ListIndex <> -1 Then
Set dataSht = Sheets("DATA")
If IsNull(Me.ListBox1.Value) Then
Call MsgBox("You are selecting on blank row item" & vbNewLine & "Be careful!", vbInformation, "Notification")
Button_TaskList_Click
Else
strAddress = GetIndexRow(.ListBox1.List(.ListBox1.ListIndex, 0), dataSht.Columns("A"))
'<~~ GetIndexRow returns "Data" sheet row corresponding to the selected Index, which is got from the 2nd column of the selected ListBox row
TaskMngUserForm.txtIndex.Value = dataSht.Range("A" & strAddress).Value
TaskMngUserForm.cmbSource.Value = dataSht.Range("B" & strAddress).Value
TaskMngUserForm.cmbType.Value = dataSht.Range("C" & strAddress).Value
TaskMngUserForm.cmbCategory.Value = dataSht.Range("D" & strAddress).Value
TaskMngUserForm.cmbPriority.Value = dataSht.Range("E" & strAddress).Value
TaskMngUserForm.cmbTaskOwner.Value = dataSht.Range("F" & strAddress).Value
TaskMngUserForm.cmbStatus.Value = dataSht.Range("G" & strAddress).Value
TaskMngUserForm.txtOpenDate.Value = dataSht.Range("H" & strAddress).Value
TaskMngUserForm.txtCloseDate.Value = dataSht.Range("I" & strAddress).Value
TaskMngUserForm.txtSubject.Value = dataSht.Range("J" & strAddress).Value
TaskMngUserForm.txtDescription.Value = dataSht.Range("K" & strAddress).Value
TaskMngUserForm.txtSolution.Value = dataSht.Range("L" & strAddress).Value
End If
' TaskMngUserForm.Show
End If
End With
Application.ScreenUpdating = True
Label25.Caption = "Check in Task.No: " & txtIndex.Text
End Sub
第3。问题和疑问
我可以将数据从Tab1加载到Listbox1,但我无法将列标题从Tab1填充到Listbox1中的Header。
我的代码有什么问题吗? 任何帮助或建议将受到高度赞赏。 非常感谢你的关注。
答案 0 :(得分:2)
我最近将UserForm编码为包含标题,我可以为您解答此问题。
只有一种方法可以填充ListBox上的标题,即使用ListBox1.RowSource属性时。在RowSource属性中,您必须分配一个Range,这是一个示例:
<a asp-area="" asp-controller="Manage" asp-action="Index" title="Manage">
<span class="glyphicon glyphicon-user" style="color:white"></span>
Hello @UserManager.GetUserName(User).Split('@')[0]!
</a>
这将在ListBox1上填充从A2到H20的数据,如果ListBox1 ColumnHeaders属性设置为True,那么Sheet1!A1:H1上的任何内容都将成为标题。这是唯一的方法。
许多用户会告诉您只是在ListBox上添加文本标签以使其更容易的原因是因为当您使用RowSource执行列表时,您必须始终找出您的Range上使用的最后一行是什么您指定范围以避免ListBox上的空行。这意味着,如果您有20行数据并且指定了包含50行的范围,则列表框将填充50行,最后30行将为空。