我有一个我为销售人员制作的电子表格。我将电子表格的三列中的下拉列表用于重复和经常使用的数据(即选择市场部门,呼叫类型和后续类型)。
要将下拉列表第一列中的缩写变为缩写的完整值(下拉列表的第二列)并将其放在单元格中,我找到并调整了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 显而易见,但我只是没有看到它。