vb, поле со списком, RefersToRange, динамические именованные диапазоны

Может ли кто-нибудь помочь решить проблему с ReferToRange в моем коде. Я приложил пример. При вызове MAIN возникает ошибка времени выполнения 1041, определяемая приложением или объектом. Я связываю список заполнения списка со списком с 3 именованными диапазонами в зависимости от значения ячейки. Эти три диапазона являются динамическими (имеют формулу смещения). поле со списком - это другой лист, чем именованные диапазоны. Пожалуйста, помогите

Sub MAIN()
Dim PT As Range
Dim i As Long

With Sheet3  ' Unique SPP
    setNames .Range("a6")
    Set PT = .Range("b1")
    i = 1
    Do Until PT = ""
        If .Range("a1").Value = PT.Value Then
            On Error Resume Next
            Sheet1.ComboBox1.ListFillRange = ThisWorkbook.Names("view" & i).Name
            If Err.Number = 1004 Then
                MsgBox "not defined name: view" & i
            ElseIf Err.Number <> 0 Then
                MsgBox "unexpected error: " & Err.Description
            End If
            On Error GoTo 0
        End If
        i = i + 1
        Set PT = PT.Offset(0, 1)
    Loop
End With
End Sub

Sub setNames(theTopLeft As Range)
    Dim theName As Name
    Dim nameStr As String
    Dim theRng As Range
    Dim i As Long
    Application.DisplayAlerts = False
    theTopLeft.CurrentRegion.CreateNames Top:=True, Left:=False, _
                Bottom:=False, Right:=False
    Application.DisplayAlerts = True
    For Each theName In ThisWorkbook.Names
        With theName.RefersToRange.Value
            For i = .Cells.Count To 1 Step -1
                If .Cells(i) <> "" Then Exit For
            Next
        End With
        If i <> 0 Then theName.RefersTo = theName.RefersToRange.Resize(i, 1)
    Next
End Sub

person user25830    schedule 13.11.2013    source источник
comment
Это похоже на VBA, а не на VB.NET. Кроме того, похоже, что это в Excel, поэтому следует добавить тег excel-vba. Вероятно, динамическому тегу здесь нет места.   -  person Zev Spitz    schedule 13.11.2013
comment
Какой у Вас вопрос?   -  person Siddharth Rout    schedule 13.11.2013
comment
При вызове MAIN возникает ошибка времени выполнения 1041, определенная приложением или определенным объектом. Ссылка referToRange выделена, извините, если я не понял. Спасибо что посмотрели мой пост   -  person user25830    schedule 13.11.2013


Ответы (1)


Мне кажется, что ваш код немного сложнее, чем нужно. Так что, если я правильно понимаю, что вы пытаетесь сделать, это должно отвечать всем требованиям.

Sub MAIN()

Dim rC As Range
Dim rD As Range
Dim i As Long
Dim s As String

On Error GoTo errTrap

With Sheet3 'change to suit
    s = .Range("a1") 'heading to find
    Set rD = .Range("A6", .Cells.SpecialCells(xlCellTypeLastCell)) 'data row 6 and down
    Set rD = rD.Resize(, 3) '1st 3 columns only, change if required
    i = Application.Match(s, rD.Rows(1).Cells, 0) 'find heading
    Set rC = rD.Columns(i).Offset(1).Cells 'drop heading from column
    Set rC = .Range(rC(1), .Cells(.Rows.Count, rC.Column).End(xlUp)) 'to end of data
'       if column contains data, fill combo
    If rC(1).Row > rD.Row Then Sheet1.ComboBox1.ListFillRange = .Name & "!" & rC.Address
End With
Exit Sub
errTrap:
If Err.Number = 13 Then
    MsgBox "heading not found:  " & s
Else
    MsgBox "unexpected error: " & Err.Description
End If

End Sub

введите описание изображения здесь

person DaveU    schedule 14.11.2013
comment
Спасибо! Ваш код намного элегантнее. Мне не удалось заставить его работать, я получаю заголовок столбца, который не найден. Я попытался переместить свои данные в соответствии с текущим диапазоном, но диапазон заполнения поля со списком не изменился. Заголовки моих столбцов находятся в A6, B6 и C6 листа 3. Вы можете помочь мне решить эту проблему? В очередной раз благодарим за помощь - person user25830; 14.11.2013
comment
О, я предположил, что ваши заголовки находятся в строке 1 - позвольте мне взглянуть на это еще раз, и я вернусь к вам. На всякий случай, у вас есть 3 столбца данных (A, B и C), а заголовки находятся в строке 6 - правильно? - person DaveU; 14.11.2013
comment
Правильно, благодарен за помощь - person user25830; 14.11.2013
comment
Спасибо, Дэйв, заголовки подбираются, но поле со списком заполняется только при выборе заголовка из первого столбца. второй и третий столбцы не заполняют комбо. Я работаю над созданием петли. Большое спасибо! - person user25830; 14.11.2013
comment
У меня это работает - возможно, вы могли бы опубликовать образец своих данных. - person DaveU; 14.11.2013
comment
Я только что добавил образец своих данных, у вас так выглядит? Между прочим, насколько я понимаю, вам не нужна петля. - person DaveU; 14.11.2013
comment
Потрясающие! Спасибо поздно ночью устал. Сделаю пожертвование Святому Иуду от вашего имени. Большое спасибо! - person user25830; 14.11.2013