有一个非常简单的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显示的正确月份和颜色,只有动态时间会保存在工作表中):
提前非常感谢...
请尝试一下。
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