VBA Macro似乎在运行时从我的下拉列表中选择了错误的数据,但是没有单步执行

时间:2018-02-02 15:39:17

标签: excel vba excel-vba drop-down-menu

我有一个我为销售人员制作的电子表格。我将电子表格的三列中的下拉列表用于重复和经常使用的数据(即选择市场部门,呼叫类型和后续类型)。

要将下拉列表第一列中的缩写变为缩写的完整值(下拉列表的第二列)并将其放在单元格中,我找到并调整了VBA宏:

Private Sub Worksheet_Change(ByVal Target As Range)
Dim selectedVal, selectedStr As String

selectedVal = Target.Value
If Target.Column = 3 Then
##    selectedStr = Application.VLookup(selectedVal, Worksheets("List Data").Range("sector"), 2, False) ##
    If Not IsError(selectedStr) Then
        Target.Value = selectedStr
    End If
ElseIf Target.Column = 9 Or Target.Column = 12 Then
    selectedStr = Application.VLookup(selectedVal, Worksheets("List Data").Range("MeetType"), 2, False)
    If Not IsError(selectedStr) Then
        Target.Value = selectedStr
    End If
End If
End Sub

如果我只是在下拉列表中选择一些内容(以我的用户身份使用它),我会得到一个休息时间和错误阅读'

  

运行时错误' 13' :类型不匹配

(在上面的代码中的##周围的##)。将鼠标悬停在变量上会显示下拉列表通过了SECOND列(项目的全名)而不是第一列中的缩写。它几乎就像它运行代码两次一样。我尝试使用EnableEvents = False,但代码根本没有运行。

另外,我不明白为什么会造成类型不匹配,因为所有数据都是字符串。在最坏的情况下,我会发现一个错误(悬停显示一个空字符串),我将在下一行捕获它。

如果我在第一个实际代码行中休息一下然后单步执行代码,一切正常。它使用第一列,找到适当的第二个值并将其放在单元格中,然后退出代码。

所有值都存储在工作簿中,因此没有理由计时错误。我真的很困惑。

为了便于参考,这些是C列下拉列表中的值:

C   Commercial
CC  Commercial/Convenience
CH  Commercial/Housing
CI  Commercial/Industry
CO  Commercial/Office
CR  Commercial/Retail
P   Public
PE  Public/Education
PM  Public/Municipal
PP  Public-Private
PS  Public/Safety
PT  Public/Transit
RR  Retail/Retailer

提前致谢。所有帮助赞赏。我确定 facepalm 显而易见,但我只是没有看到它。

0 个答案:

没有答案