добавить элементы в выпадающий список - PullRequest
1 голос
/ 30 октября 2019

Я пытаюсь добавить элементы из файла, сохраненного по пути "C: \ Users \ se72497 \ Desktop", который содержит в 1-м столбце листа "Departamentos" ряд значений, которые я хочу добавить в комбинированный список,

Мой выпадающий список получает название отдела.

Private Sub UserForm_Initialize()
        Dim filename As Workbook
        Set filename = Workbooks.Open("C:\Users\se72497\Desktop\Tablas_Macro.xlsx")
        With filename.Sheets("Departamentos")
            dept.List = Range("A2", .Range("A" & Rows.Count).End(xlUp).Value)
        End With
End Sub

Я пытался выполнить этот код, но он возвращает мне ошибку времени выполнения:

enter image description here

Почему vba возвращает мне эту ошибку?

Ответы [ 2 ]

2 голосов
/ 30 октября 2019

.Value находится не в том месте. (Или вы могли бы сказать, что скобка не в том месте). Исправляя это, вы получаете:

.Range("A2", .Range("A" & Rows.Count).End(xlUp)).Value

С вашим текущим кодом .Value означает в вызове Range, поэтому вы пытаетесь использовать значение ячейки, а не сама ячейка , как второй аргумент.

Вы хотите, чтобы это было снаружи.

В противном случае, если значение последней ячейки равно "foo", то ваш код эквивалентен

 Range("A2", "foo")

, что, безусловно, не то, что вы хотите.

0 голосов
/ 30 октября 2019

Поэтому, когда вы нажмете pn, данные вашего поля со списком будут загружены,

'Предварительные требования присваивают имя ячейке A2 с переменной rstart

Private Sub UserForm_Initialize ()

Dim ws As Worksheet: Set ws = Worksheets("Departamentos")
Dim i As Integer: i = 0
Dim lRow As Long
Dim sAddress As String

On Error GoTo errhandling
If Me.nameofcombobox.Value = vbNullString Then
    MsgBox "Select value to continue!"
Else
    With ws
        lRow = .Range("Departamentos").Rows.Count
        'name the cell a2 as rstart
        Do Until .Range("rStart").Offset(0, i).Value = Me.nameofcombobox.Value
            i = i + 1
        Loop
        sAddress = .Range("rStart").Offset(0, i - 1).Address
        .Range(sAddress & ":" & Left(sAddress, 4) & lRow).Value = .Range(sAddress & ":" & Left(sAddress, 4) & lRow).Value
    End With
End If
On Error GoTo 0

MsgBox "Completed without errors", vbInformation, "Success"

FunctionOutput: Set ws = Nothing

Exit Sub

errhandling: MsgBox "Произошла следующая ошибка:" & Err.Description, vbCritical, "Error" Resume FunctionOutput

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