Именованный диапазон в поле со списком - PullRequest
0 голосов
/ 18 октября 2018

Как вставить именованный диапазон в поле со списком, используя VBA. Здесь в соответствии со значением в выпадающем списке 1 мне нужно вставить определенные именованные диапазоны в выпадающем списке 2.Здесь Def1m, Def2m и т. Д. Являются именованными диапазонами

Private Sub Def_Change()
If combobox1.Value = "1 month" Then
Me.combobox2.RowSource = Def1m
ElseIf combobox1.Value = "2 month" Then
Me.combobox2.RowSource = Def2m
ElseIf combobox1.Value = "3 month" Then
Me.combobox2.RowSource = Def3m
ElseIf combobox1.Value = "6 month" Then
Me.combobox2.RowSource = Def6m
ElseIf combobox1.Value = "yearly" Then
Me.combobox2.RowSource = Defyearly
End If
End Sub

Пожалуйста, предложите

Ответы [ 2 ]

0 голосов
/ 18 октября 2018

Вы можете создать функцию, взяв строку из combobox1 и вернув диапазон.Таким образом, вы сможете вызывать функцию следующим образом:

Me.combobox2.RowSource = GetRowSource(combobox1.Value)

и вся логика будет как-то аккуратной:

Sub TestMe()    
    Debug.Print GetRowSource("2 month").Address 'prints the address of named range "Def2m"
End Sub

Public Function GetRowSource(timePeriod As String) As Range    
    Select Case timePeriod
        Case "1 month"
            Set GetRowSource = [Def1m]
        Case "2 month"
            Set GetRowSource = [Def2m]
        Case "3 month"
            Set GetRowSource = [Def3m]
        Case "6 month"
            Set GetRowSource = [Def6m]
        Case "yearly"
            Set GetRowSource = [Defyearly]
        Case Else
            Set GetRowSource = Nothing
    End Select    
End Function
0 голосов
/ 18 октября 2018

При записи строк в свойства необходимо обернуть данные в кавычки, поэтому, чтобы установить для RowSource значение Def1m, вы должны отправить «Def1m» (в виде строки).

Кроме того, вам потребуется многолучше сделать это с помощью оператора Select Case, чтобы привести его в порядок:

Private Sub Def_Change()
    With Me.combobox2
        Select Case combobox1.Value
            Case "1 month": .RowSource = "Def1m"
            Case "2 month": .RowSource = "Def2m"
            Case "3 month": .RowSource = "Def3m"
            Case "6 month": .RowSource = "Def6m"
            Case "yearly": .RowSource = "Defyearly"
        End Select
    End With
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...