gpt4 book ai didi

vba - 从列标题填充列表框的标题

转载 作者:行者123 更新时间:2023-12-04 20:04:58 25 4
gpt4 key购买 nike

一、背景与宗旨
我正在创建一个用户表单来显示 Excel 工作表(“DATA”)中的数据,其中包含多列的表(“Tab1”),如下图所示。
在我的表单(“TaskMngUserForm”)中,单击“任务列表”按钮后,Tab1 中的所有数据将显示在 Listbox1 上,如下所示:

  • Tab1 中的列标题将作为 Header 显示在 Listbox1 上。
  • Tab1 中从第 2 行到结尾的数据将显示在 Listbox1 上,对应于每一列。

  • 此外,我正在为操作“Listbox1_Click()”添加一个事件,该事件从所选 ListBox1 行的第二列返回与所选索引相对应的“数据”工作表行。
    用户窗体和列表框
    enter image description here
    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 中的标题。

    最佳答案

    我最近编写了一个包含标题的用户表单,我可以为你回答这个问题。

    只有一种方法可以填充 ListBox 上的标题,即使用 ListBox1.RowSource 属性。在 RowSource 属性中,您必须分配一个范围,这是一个示例:

    UserForm1.ListBox1.RowSource = "Sheet1!A2:H20"

    这将在 ListBox1 上填充从 A2 到 H20 的数据,如果 ListBox1 ColumnHeaders 属性设置为 True,那么 Sheet1!A1:H1 上的任何内容都将成为标题。这是唯一的方法。

    许多用户会告诉您只在 ListBox 顶部添加文本标签以使其更容易的原因是,当您使用 RowSource 进行列表时,您必须始终在分配之前找出 Range 上使用的最后一行是什么范围以避免 ListBox 上出现空行。这意味着如果您有 20 行数据并且您分配了一个包含 50 行的范围,则列表框将填充 50 行,最后 30 行将是空的。

    关于vba - 从列标题填充列表框的标题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50110770/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com