Как исправить «неверное значение свойства» из выпадающего списка после изменения формата выпадающего списка - PullRequest
0 голосов
/ 09 мая 2019

После изменения формата combobox5 теперь выдается «недопустимое значение свойства.

    `Option Explicit
Private Sub ComboBox5_Change()
ComboBox5 = Format(ComboBox5, "00%")
End Sub
' CODE MIMIC "DATA VALIDATION"
Private Sub UserForm_Initialize()

    Me.ComboBox1.List = Worksheets("B16.5 & B16.47 SERIES A").Range("R15:R16").Value
    Me.ComboBox2.List = Worksheets("B16.5 & B16.47 SERIES A").Range("U5:U9").Value
    Me.ComboBox3.List = Worksheets("B16.5 & B16.47 SERIES A").Range("B5:B40").Value
    Me.ComboBox4.List = Worksheets("B16.5 & B16.47 SERIES A").Range("R5:R12").Value
    Me.ComboBox5.List = Worksheets("B16.5 & B16.47 SERIES A").Range("T5:T10").Value
    Me.ComboBox6.List = Worksheets("B16.5 & B16.47 SERIES A").Range("R18:R19").Value


End Sub
`

1 Ответ

1 голос
/ 09 мая 2019

Значения ComboBox могут быть только теми, что есть в их списке. Обратите внимание, что получение свойства .Value ячеек получает их базовое значение (например, .57) вместо их отформатированного значения отображения (например, 57%), что, вероятно, является причиной возникновения этой проблемы. К сожалению, вам необходимо загрузить значения в массив, а затем отформатировать эти значения в желаемом отображаемом тексте, а затем загрузить их в список выпадающего списка. На самом деле я не могу придумать решения с одной строкой, но что-то вроде этого должно сработать (и тогда нет необходимости в событии изменения):

Private Sub UserForm_Initialize()

    Dim ws As Worksheet
    Set ws = ThisWorkbook.Worksheets("B16.5 & B16.47 SERIES A")

    Dim aLists(1 To 6, 1 To 2) As Variant
    'This is the combobox               'This is the range where the combobox gets its values
    Set aLists(1, 1) = Me.ComboBox1:    Set aLists(1, 2) = ws.Range("R15:R16")
    Set aLists(2, 1) = Me.ComboBox2:    Set aLists(2, 2) = ws.Range("U5:U9")
    Set aLists(3, 1) = Me.ComboBox3:    Set aLists(3, 2) = ws.Range("B5:B40")
    Set aLists(4, 1) = Me.ComboBox4:    Set aLists(4, 2) = ws.Range("R5:R12")
    Set aLists(5, 1) = Me.ComboBox5:    Set aLists(5, 2) = ws.Range("T5:T10")
    Set aLists(6, 1) = Me.ComboBox6:    Set aLists(6, 2) = ws.Range("R18:R19")

    'Loop through your list of comboboxes and load values
    Dim aTemp As Variant
    Dim i As Long, j As Long
    For i = LBound(aLists, 1) To UBound(aLists, 1)
        Select Case aLists(i, 1).Name
            'Specify the comboboxes that should have the percent format here
            Case "ComboBox5"
                aTemp = aLists(i, 2).Value
                For j = LBound(aTemp, 1) To UBound(aTemp, 1)
                    aTemp(j, 1) = Format(aTemp(j, 1), "00%")
                Next j
                aLists(i, 1).List = aTemp

            'Can use this same method to apply different formats as well to different comboboxes, add additional conditions here

            'Otherwise just load the values as is
            Case Else
                aLists(i, 1).List = aLists(i, 2).Value

        End Select
    Next i

End Sub

Снимок экрана с результатом:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...