0

我试图让用户从数据验证创建的单元格下拉框中选择描述(比如说 Apple),但输出不是“Apple”,而是与 Apple 相关联的代码,即 AP。目前我有一个包含所有描述和代码的查找表(我将描述放在左侧,因为我被告知这通常与 VLOOKUP 一起使用效果更好)查找表示例

我设法修改了我在网上找到的一些代码来执行这项工作(代码正在使用具有定义名称的数据范围对 3 个单独的列执行操作,以供 Range() 选择)[见下文]。但是,我发现此代码使工作表非常不稳定并且容易挂起/崩溃。如果我设置断点并单步执行代码,代码似乎可以完美运行。但是,当按预期运行代码时,它可能会在几行上正常工作,然后在选择一个值时突然挂起(有时会给出一个 Excel 内存不足错误,就好像它正在运行无限循环或其他东西一样)。此外,如果用户尝试清除第 3、5 或 9 列中的多行(通过拖动选择并按删除),则代码将始终使 excel 崩溃。我假设某些原因导致无限循环,但我不知道答案是什么(一一删除行似乎很好)。我已经检查了代码中引用的拼写(如前所述,它最初是有效的),并且查找表有每个项目的描述和相应的代码。

    Private Sub Worksheet_Change(ByVal Target As Range)
'Update datavalidation selection (description) to relevent code (code)
    selectedNa = Target.Value
    If Target.Column = 3 Then
        selectedNum = Application.VLookup(selectedNa, Sheet2.Range("HoleType"), 2, False)
    ElseIf Target.Column = 5 Then
        selectedNum = Application.VLookup(selectedNa, Sheet2.Range("GridCoordinates"), 2, False)
    ElseIf Target.Column = 9 Then
        selectedNum = Application.VLookup(selectedNa, Sheet2.Range("DHSurveyMethod"), 2, False)

    End If
    
    'If selectedNum returns a valid entry, replace the cells contents (item description) with value (item code)
    If Not IsError(selectedNum) Then
            Target.Value = selectedNum

    Exit Sub 'Added to try and stop repeated loops, doesn't seem to have any effect which is partially expected.

    End If
End Sub

我可以在现有代码中实施一个简单的解决方案吗?也许有比我可以使用的 Worksheet_Change 更合适的事件?(例如选择的下拉选项或类似的东西)。

我已经开始通过创建可点击的按钮来暂时缓解这个问题,这些按钮为给定的用户选择的范围运行类似的脚本,但是这个解决方案似乎非常不优雅,并且不会实时更新所需的单元格,这可能导致提交的表格带有混合的描述和如果用户没有按需要运行此功能(更不用说指导用户所需的新输入以及它们如何工作),则在列中编写代码。

感谢您的时间。

山姆

4

0 回答 0