Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
excel中的验证,其中名称列在组合框中,但Id放在单元格中_Excel_Validation - Fatal编程技术网

excel中的验证,其中名称列在组合框中,但Id放在单元格中

excel中的验证,其中名称列在组合框中,但Id放在单元格中,excel,validation,Excel,Validation,在上图中,我想设置一个人的语言。我可以使用Id-s进行验证,但我希望在组合框中显示语言名称(英语、德语、西班牙语),但选择后,我希望在单元格中显示语言Id 似乎我不能用简单的“数据/数据验证”来做到这一点。我说得对吗 我可以选择带有数据验证的语言名称,然后我可以从中确定语言id。这不是我想要的,因为名称应该取决于id,而不是相反 我尝试使用ComboBox(表单控件),它返回所选元素的索引,从该索引中我可以确定Id,但我有一个语言索引和语言Id似乎很愚蠢 基于COY答案的解决方案 Private

在上图中,我想设置一个人的语言。我可以使用Id-s进行验证,但我希望在组合框中显示语言名称(英语、德语、西班牙语),但选择后,我希望在单元格中显示语言Id

似乎我不能用简单的“数据/数据验证”来做到这一点。我说得对吗

我可以选择带有数据验证的语言名称,然后我可以从中确定语言id。这不是我想要的,因为名称应该取决于id,而不是相反

我尝试使用ComboBox(表单控件),它返回所选元素的索引,从该索引中我可以确定Id,但我有一个语言索引和语言Id似乎很愚蠢

基于COY答案的解决方案

Private Sub Worksheet_Change(ByVal Target As Range)
    If Not Intersect(Target, Range("Persons[LanguageId]")) Is Nothing Then
        If VarType(Target.Value) = vbString Then
            Position = Application.Match(Target.Value, Range("Languages[Language]"), 0)
            Target.Value = WorksheetFunction.Index(Range("Languages[Id]"), Position)
        End If
    End If
End Sub

我想不出更好的选择…您可能真的需要一些VBA来完成此操作,并打开工作簿.xlsm

关键思想是在此工作簿中添加工作簿更改的处理

Private子工作簿\u SheetChange(ByVal Sh作为对象,ByVal Target作为范围)
如果Target.Column=7,则
'此示例仅以G列为例
'如果您对工作簿有更多的了解,您应该在这里有更好的条件
如果不是数字(Target.Value),则
Target.NumberFormat=“”+Target.Value+“”
Target.Value=WorksheetFunction.Match(Target.Value,范围(“LangTable[Language]”,0)
Target.Value=WorksheetFunction.Index(范围(“LangTable[Id]”),Target.Value)
如果结束
如果结束
端接头
要在VBA中执行此操作,可以选择几个不同的设置

  • 将该值设置并显示为id(从示例代码中删除NumberFormat更改)
  • 将该值保留为语言名称,仅显示为Id
  • 与我的示例代码一样,将该值设置为id,显示语言名称