微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

VBA - 尝试在选择时动态更改数据验证下拉框输出崩溃 Excel 2013

如何解决VBA - 尝试在选择时动态更改数据验证下拉框输出崩溃 Excel 2013

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

Example of Lookup Sheet

我设法调整了我在网上找到的一些代码来执行这项工作(该代码使用具有定义名称的数据范围在 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"),False)
    ElseIf Target.Column = 9 Then
        selectednum = Application.VLookup(selectedna,Sheet2.Range("DHSurveyMethod"),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 更合适的事件? (例如选择的下拉选项或类似的东西)。

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

感谢您抽出宝贵时间。

山姆

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。