我正在Excel中创建一个电子表格,稍后将导入到Access数据库中。我让用户从多个下拉菜单中选择一个值。我的问题是,这些下拉菜单值需要非常具体,并且不是很易读,例如:
notAttendingSchoolWhy: (choose one) TOO_YOUNG_FOR_SCHOOL GRADUATED NOT_ATTENDING_DUE_TO_DIABETES NOT_ATTENDING_DUE_TO_FINANCIAL_REASONS NOT_ATTENDING_FOR_OTHER
我希望它们更具可读性,但仍然可以导入我的数据库。所以,我想在Excel中使用类似别名的东西,用户可以看到“漂亮”的版本,例如。
不参加学校为什么:
学校太年轻了 毕业
etc.etc。
我仍然可以将匹配版本放入我的数据库中。有任何想法吗?所有人都非常感激。
答案 0 :(得分:1)
欢迎来到SO。是的,这是可能的。
通过暴力你可以实际做到这一点:
Dim whattowrite As String
Select Case Mydropdown.Value ' you didn't mention the type of object you are using
Case "Too young for school"
whattowrite = "TOO_YOUNG_FOR_SCHOOL"
Case "Some more"
.
.
End Select
Range("YourActualRangeAddress").Value = whattowrite
如果您有多个下拉菜单,这不是很方便。 因此,您可以执行David评论的内容,您需要在某处存储值(使用范围,数组或者如果您知道 Dictionary )。我会选择Range样本,因为在我看来这是最简单的。
设置这样的临时表格,我们称之为Sheet1
:
我们也可以为范围命名(请参阅使用Named Ranges)
A2:A6
将为Informative
B2:B6
将为Actual
我们可以使用以下方法初始化下拉值:
Private Sub Worksheet_Activate()
With Me.ComboBox21
.ListFillRange = ThisWorkbook.Names("Informative") _
.RefersToRange.Address(, , , True)
.ListIndex = -1
End With
End Sub
然后我们可以使用以下命令将值写入单元格或任何目的地:
Private Sub ComboBox21_Change()
Dim r As Range
Set r = ThisWorkbook.Names("Actual").RefersToRange
With Me
.Range("G2").Value = Application.Index(r, .ComboBox21.ListIndex + 1, 1)
End With
End Sub
结果将是:
实际上有很多可能的设置。我希望这能让你了解所有这些可能性。