Excel VBA和别名?这可能吗?

时间:2015-03-31 00:48:44

标签: excel vba excel-vba

我正在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。

我仍然可以将匹配版本放入我的数据库中。有任何想法吗?所有人都非常感激。

1 个答案:

答案 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

enter image description here

我们也可以为范围命名(请参阅使用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

结果将是:

enter image description here

实际上有很多可能的设置。我希望这能让你了解所有这些可能性。