【发布时间】:2016-06-09 20:31:05
【问题描述】:
在处理应用程序时,我无法在列表框中获取所选项目以实际输出正确的行值。我正在使用.Selected 方法来选择需要选择哪一行才能继续下一步,这将从列表框中提取绑定列的值以进行进一步处理,而无需用户与列表框进行交互.
事实证明,.Selected 的工作方式与单击列表框行的方式不同,因为它的输出值仍然是最后一个“手动”选择的行的绑定列值。
我意识到我必须在.Selected 方法之后使用.ItemData 方法才能使列表框输出值实际等于我在.Selected 方法中选择的行。
这是我用来将供应商 PN 查找表上的选择复制到主要部件搜索表的代码:
Private Sub cmdAddTofrmPartSearch_Click()
Dim i as Integer
... [truncated]
Forms("frmPartSearch").lstSearchResults.Selected(i - 1) = True
... [truncated]
Forms("frmPartSearch").txtHiddenPN.Value
= Forms("frmPartSearch").lstSearchResults.ItemData(i - 1)
...[truncated]
End Sub
如上,为什么需要使用:
Forms("frmPartSearch").lstSearchResults.Selected(i - 1) = True
与
Forms("frmPartSearch").txtHiddenPN.Value
= Forms("frmPartSearch").lstSearchResults.ItemData(i - 1)
要让txtHiddenPN 接收正确的行值,而不是简单地将txtHiddenPN 的控制源设置为=[lstSearchResults] 并让它更新为.Selected 之后的行值?
如果.Selected 不改变列表框的输出值(除了方便,但徒劳地突出显示一行),它有什么用?同样,为什么.ItemData 也不突出显示其边界值正在输出的行?这是糟糕的设计,还是有另一种方法可以同时实现这两种结果?按顺序自动包含这两种方法是最佳做法吗?是否存在只需要调用一个方法的情况?
我是 VBA 和一般编码的新手,所以也许这在该领域很常见,但它似乎很迟钝。
【问题讨论】: