Почему использование именованного диапазона не возвращает значения?

У меня одна рабочая тетрадь с несколькими листами. Я заполняю списки (извлекая статические данные из ячеек) на втором листе, нажимаю кнопку, и все работает нормально.

Когда я заполняю списки именованным диапазоном, список заполняется так, как я хочу, но я получаю сообщение об ошибке, потому что код думает, что я ничего не выбрал в списке, хотя я это сделал. Таким образом, он проходит через "" вместо "title".

Это обычная проблема? Именованный диапазон не является проблемой, потому что он передает данные в список, и я знаю, что он выбирает данные, потому что, как только список теряет фокус, он выводит содержимое ячейки в ячейку A1.

Что еще более странно, так это то, что у меня для содержимого списка установлено значение Msg1. Итак, A1 заполняется Msg1 (то, что я выбрал в списке). Но когда я пытаюсь использовать Msg1 в коде, он говорит мне, что Msg1 это "". Опять же, это происходит только тогда, когда я использую динамический именованный диапазон, а не со статическими данными в ячейках K1:K9.

Private Function strEndSQL1 As String

Dim strSQL As String

    strSQL = ""
            'Create SQL statement
        strSQL = "FROM (SELECT * FROM dbo.Filter WHERE ID = " & TextBox1.Text & " And Source IN (" & Msg1 & ")) a FULL OUTER JOIN "
        strSQL = strSQL & "(SELECT * FROM dbo.Filters WHERE ID = " & TextBox2.Text & " And Source IN (" & Msg1 & ")) b "
        strSQL = strSQL & "ON a.Group = b.Group    
    strEndSQL = strSQL

End Function

person Daniel    schedule 13.05.2010    source источник
comment
Пожалуйста, покажите код, который читает список.   -  person Lance Roberts    schedule 13.05.2010
comment
Вы могли использовать именованный диапазон для конкретного листа или иметь повторяющиеся именованные диапазоны в книге.   -  person Lance Roberts    schedule 13.05.2010
comment
Что ж, я смог заставить именованный диапазон нормально работать с полем списка (хотя как только я нажимаю на выбор в списке, я получаю A1 для заполнения, а не тогда, когда я теряю фокус). Я могу только думать, что это что-то в настройке именованного диапазона или списка, но существует слишком много возможностей, чтобы закрепить это.   -  person Lance Roberts    schedule 13.05.2010
comment
Если бы это было так, то как заполняется список? Вдобавок ко всему, он выдает данные, когда теряет фокус (я не включил этот код). Единственное отличие состоит в том, что он ссылается на именованный диапазон вместо фактического диапазона.   -  person Daniel    schedule 13.05.2010


Ответы (1)


Я не уверен, как вы заполняете список, и находится ли он в панели инструментов Forms или Control Toolbox. Если последнее, то вот пример заполнения и извлечения значений.

Sub FillListBox()

    Sheet1.ListBox1.List = Sheet1.Range("MyNamedRange").Value

End Sub

Sub MakeSQL()

    Dim sSql As String
    Dim Msg1 As String

    With Sheet1.ListBox1
        If .ListIndex > -1 Then
            Msg1 = .Value
        End If
    End With

    sSql = "SELECT * FROM MyTable WHERE ID=" & Msg1

    Debug.Print sSql

End Sub

Обратите внимание, что свойство Value будет зависеть от того, что вы установили в свойстве BoundColumn.

person Dick Kusleika    schedule 13.05.2010
comment
Он находится в панели инструментов управления. У меня есть аналогичный код, который работает, когда это не именованный диапазон. С какой стати разница? Раз уж он там, не должен ли он просто быть там? - person Daniel; 14.05.2010
comment
Если вы используете свойства ListFillRows и LinkedCell, а не заполняете их, как в приведенном выше коде, это может быть источником вашей проблемы. Я давно отрекся от тех свойств из-за странного поведения. Я не помню, совпадает ли поведение, которое я видел, с тем, что вы видите, но оно было достаточно странным, и я просто перестал их использовать. - person Dick Kusleika; 14.05.2010