【问题标题】:Populating ListBox in Userform with Unique Values on workbook使用工作簿上的唯一值填充用户窗体中的列表框
【发布时间】:2021-12-07 18:05:59
【问题描述】:

在通过活动按钮填充工作簿后,我正在尝试使用 P 列中的唯一值填充列表框。我编写了以下语法,但由于某种原因,它只是用第一个单元格数据填充 ListBox,但停在那里......有什么想法吗?我敢肯定,由于我是 VBA 新手,所以我缺少一些简单的东西。

Dim Cellrng As Range
Dim Unique As New Collection
Dim Item As Range

On Error Resume Next
For Each Cellrng In ThisWorkbook.Worksheets("START").Range("P8:P" & lRow)
    Unique.Add Cellrng, CStr(Cell)
Next Cellrng
On Error GoTo 0

For Each Item In Unique
   ListBox1.AddItem Item
Next Item

【问题讨论】:

  • 首先,删除On Error Resume Next - 现在它会给你任何错误吗?接下来,您需要给lRow 一个值。这不能是 0 或空白,因为没有“第 0 行” - 接下来,你永远不会定义 Cell 或给它一个值,所以你有很多问题。
  • “此键已与此集合的元素相关联” - 突出显示“Unique.Add Cellrng, CStr (Cell)”行。我应该在前面提到,这个块在一个更大的 sub 中运行,它已经给了 lRow 正确的值。
  • 知道了。只需将(Cell)更改为(Cellrng) - 在那里放了一个大脑屁。一天结束哈哈。 TY 的帮助!
  • 省去一些麻烦,并确保您始终在所有代码窗口的顶部使用Option Explicit

标签: vba listbox userform


【解决方案1】:

只需将 (cell) 更改为 (Cellrng)

Dim Cellrng As Range
Dim Unique As New Collection
Dim Item As Range
Dim lRow As Integer

lRow = wkb.Sheets(1).Cells.Find(What:="*", SearchOrder:=xlRows, SearchDirection:=xlPrevious, LookIn:=xlValues).row
    On Error Resume Next
    For Each Cellrng In ThisWorkbook.Worksheets("START").Range("P8:P" & lRow)
        Unique.Add Cellrng, CStr(Cellrng)
    Next Cellrng
    On Error GoTo 0

For Each Item In Unique
   ListBox1.AddItem Item
Next Item

【讨论】:

  • 已修复。已经在我当前的 Sub 中,但我最初并没有把它放在我的问题中。
  • 请记住,这些答案将来经常被其他人使用,因此需要完整。这看起来更好。
猜你喜欢
  • 2021-08-27
  • 1970-01-01
  • 2018-04-09
  • 2020-04-03
  • 1970-01-01
  • 2015-07-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多