【发布时间】:2019-10-16 03:16:11
【问题描述】:
我查看了有关此问题的先前问题,但找不到答案。我在 VBA 中使用 VLOOKUP 来使用基于选择的数据填充用户表单。我继续在某些条目上出现不匹配,而其他条目则有效,现在没有。这是代码:
Private Sub jobRefCbo_Change()
Application.ScreenUpdating = False
Call Lists_sort ' This just sorts a list of the 'Active' data so the user only sees the active jobs in the combo box.
Me.nameTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 2, False)
'Me.acNoTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 2, False)
Me.jobDesc2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 3, False)
'Me.date2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 4, False)
Me.month2Txt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 5, False)
Me.timeOnJobTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 6, False)
Me.StatusTxt.Value = Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 7, False)
Me.startTime2Txt.Value = Format(CDate(Application.WorksheetFunction.VLookup(CDbl(Me.jobRefCbo.Value), Worksheets("Lists ").Range("I3:P21"), 8, False)), "hh:mm:ss AM/PM")
Application.ScreenUpdating = True
End Sub
一般来说,任何关于这样做的建议都非常感谢。
【问题讨论】:
-
第一:宏接触工作表的次数越多,代码运行的时间就越长。第二:当尝试将数字与相同数字的字符串表示匹配时,VLookup 有时会失败,反之亦然。我建议将工作表中的数据拉到 excel 中的数组中,循环遍历具有“匹配”的列以识别行,然后从数组中识别的行中提取信息。
-
似乎只有在工作参考查找中使用字母时才会不匹配。我现在正在测试这个。
-
Mistella 是你的头,它一定是导致错误的字符串解释。如果我可能会问,我如何将数据转换为数组?
-
如果是这种情况,这将是由包装
Me.jobRefCbo.Value的CDbl函数引起的。CDbl转换为 double,这是一个数字类型。如果Me.jobRefCbo.Value曾经包含非数字,则CDbl函数将出错 -
最简单的解决方法可能是删除
CDbl,但如果您想加快代码速度,我可以添加更多关于将数据拉入数组的信息。