工作表到ListBox1到另一个工作表

问题描述 投票:0回答:1

有一个非常简单的ListBox1,用于显示Sheet5 中的数据。除了用于显示 Sheet5 中的数据的代码之外,还有将数据保存到另一个工作表 (Sheet9) 的代码。我的问题是,根据 ListBox1 显示将数据放在正确的行和列上。

这是 Sheet5 中 ListBox1 显示的图像:

这是Sheet5的原始数据图像:

这是Sheet5的原始数据文本:

Month       || Color    || Time
August      || Red      || 0:00:12
August      || Blue     || 0:00:02
September   || Blue     || 0:00:03
October     || Yellow   || 0:01:00
October     || Green    || 0:00:10

这是 Sheet9 的原始图像(保存 ListBox1 数据的位置 [暂时 - 因为我有所需的 Sheet9 输出]):

这是我的整个表单代码:

Option Explicit
Private Sub UserForm_Initialize()
With Worksheets("Sheet5")
    Dim c As Range
    Dim i As Long
    For Each c In .Range("A2:A100")
        With Me.ListBox1
            .ColumnHeads = True
            .ColumnCount = 3
            .ColumnWidths = "75;75;75;75"
            .AddItem
            .List(i, 0) = c
            .List(i, 1) = c.Offset(, 1)
            .List(i, 2) = Format(c.Offset(, 2), "hh:mm:ss")
            i = i + 1
        End With
    Next c
End With

    Dim shT As Worksheet, cT As Range
    Set shT = ThisWorkbook.Sheets("Sheet9")
    Dim nT As Long
    shT.Range("B2: M2").ClearContents
    shT.Range("B3: M3").ClearContents
    'shT.Range("B4: M4").ClearContents
    'shT.Range("B5: M5").ClearContents
            
    For nT = 1 To Me.ListBox1.ListCount - 1
        'LOCATE
        Set cT = shT.Range("1:1").Find(Me.ListBox1.List(nT, 0), , xlValues, xlWhole)
        If Not cT Is Nothing Then
            cT.Offset(1, 0).value = ListBox1.List(nT, 1)
            cT.Offset(2, 0).value = ListBox1.List(nT, 2)
        End If
    Next nT
End Sub

这是我上面的代码的当前结果。下面的红色标记不显示,而 ListBox1 中显示绿色标记。此表中的第 1 行以及 A 列都是手动编码的。这并不是我真正想要的 Sheet9 输出。我只是显示我正在使用的代码的当前输出。

这是我想要的按照 ListBox1 显示的输出,这可能吗?如果是这样,应该在上面的代码中更改什么才能以这种方式保存在 Sheet9 中?还是手动编码第1行和A列(换句话说,根据ListBox1显示的正确月份和颜色,只有动态时间会保存在工作表中):

提前非常感谢...

excel vba forms listbox spreadsheet
1个回答
0
投票

请尝试一下。

    Dim shT As Worksheet, cT As Range, cC As Range
    Set shT = ThisWorkbook.Sheets("Sheet9")
    Dim nT As Long
    shT.Range("B2: M2").ClearContents
    shT.Range("B3: M3").ClearContents
    For nT = 1 To Me.ListBox1.ListCount - 1
        'Locate month
        Set cT = shT.Range("1:1").Find(Me.ListBox1.List(nT, 0), , xlValues, xlWhole)
        'Locate color
        Set cC = shT.Range("A:A").Find(Me.ListBox1.List(nT, 1), , xlValues, xlWhole)
        If Not (cT Is Nothing Or cC Is Nothing) Then
            shT.Cells(cC.Row, cT.Column).Value = ListBox1.List(nT, 2)
        End If
    Next nT
© www.soinside.com 2019 - 2024. All rights reserved.