Заголовок переменной на флажках с использованием Excel VBA - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть следующий код, который создает флажки на основе значений из набора записей, который может быть A, B, C или D. Я хочу, чтобы заголовок флажков показывал, что означают эти буквы.Например, A = отлично, B = очень хорошо, C = хорошо, D = плохо.У меня есть эти значения на листе, и я делаю vlookup, чтобы получить соответствующее имя, поэтому код в настоящее время выполняет желаемое действие, но есть ли способ не иметь эти значения на листе, возможно, в переменной или на скрытом листе?

If Not rst.EOF And Not rst.BOF Then
    i = 0
    Do
        With MultiPage1.Pages(2).Controls.Add("Forms.Checkbox.1", "Checkbox" & i)
            .Top = yPos
            .Left = 7
            .Caption = Application.WorksheetFunction.VLookup(rst![Perspect], ThisWorkbook.Sheets("Sheet1").Range("b26:c30"), 2, False)
            .Width = 450
            .Height = 24
            .WordWrap = True
            .Value = False
            yPos = yPos + 17
            .Tag = rst![Perspect]
            i = i + 1
            rst.MoveNext
        End With
    Loop Until rst.EOF
    rst.Close
End If

Ответы [ 4 ]

0 голосов
/ 12 февраля 2019

Всегда был поклонником словарей для подобных задач.Могу я предложить.

Sub GradeDictionary()
Dim dict As Object, key, val
Set dict = CreateObject("Scripting.Dictionary")

key = "A": val = "Excellent"
dict.Add key, val

key = "B": val = "Very Good"
dict.Add key, val

key = "C": val = "Good"
dict.Add key, val

key = "D": val = "Bad"
dict.Add key, val

For Each k In dict.Keys
    ' Print key and value
    Debug.Print k, dict(k)
Next

End Sub
0 голосов
/ 12 февраля 2019

Лучший вариант - поместить его в свой набор записей.Если у вас нет этой опции, то я думаю, что это самый чистый способ:

Замените .Caption = ... на

 .Caption = GradeCaption(rst![Perspect])

И затем создайте свою функцию:

Function GradeCaption(Grade As String) As String
    Select Case Grade
        Case "A"
            GradeCaption = "Excellent"
        Case "B"
            GradeCaption = "Very Good"
        Case "C"
            GradeCaption = "Good"
        Case "D"
            GradeCaption = "Bad"
    End Select
End Function
0 голосов
/ 12 февраля 2019

Существует множество возможностей для достижения вашей цели: лист, скрытый лист, массивы, словарь ... добавлена ​​возможность с выбранным регистром:

Sub Call_GetDescr()
    MsgBox "A: " & getDescription("A")
    MsgBox "B: " & getDescription("B")
    MsgBox "C: " & getDescription("C")
    MsgBox "D: " & getDescription("D")
    MsgBox "X: " & getDescription("X")
End Sub

Function getDescription(inputStr As String) As String
Dim result As String
    Select Case inputStr
        Case "A"
            result = "very good"
        Case "B"
            result = "good"
        Case "C"
            result = "sufficient"
        Case "D"
            result = "bad"
        Case Else
            result = "not defined"
    End Select
    getDescription = result
End Function
0 голосов
/ 12 февраля 2019

Как-то так может помочь

Function getVal(strLetter As String)

Dim a() As Variant

Dim b() As Variant

a = Array("Gold", "Silver", "Bronze")
b = Array("A", "B", "C")

Debug.Print Application.WorksheetFunction.Index( _
                a, 1, _
                Application.WorksheetFunction.Match(strLetter, b, 0))
End Function

Называя так

getVal("B") дает серебро, getVal("C") дает бронзу и т. Д.

...