Необычное поведение добавления списка VBA - PullRequest
0 голосов
/ 01 ноября 2018

Я написал программу VBA для запуска добавить список элементов из видимого диапазона листа Excel. Смотрите код ниже:

Dim LR, LRR As Integer
Dim FilterArea As Range
Dim oneCell As Variant
Dim FiltCount As Integer
LR = Sheet2.Range("A" & Rows.Count).End(xlUp).Row
Sheet2.Cells.AutoFilter
UserFrom3.ListBox1.Clear
FiltCount = 0

'AutoFiltering the FilterArea
With Sheet2.Range("A2:N" & LR)

    If (UserFrom3.ComboBox3 <> "") Then
        FiltCount = 1
        .AutoFilter _
        Field:=4, _
        Criteria1:=UserFrom3.ComboBox3
    End If

    If (UserFrom3.ComboBox1 <> "") Then
        FiltCount = 1
        .AutoFilter _
        Field:=5, _
        Criteria1:=UserFrom3.ComboBox1
    End If

    If (UserFrom3.TextBox1 <> "") Then
        FiltCount = 1
        .AutoFilter _
        Field:=8, _
        Criteria1:="*" & UserFrom3.TextBox1.Text & "*"
    End If
End With



If FiltCount = 1 Then
    With UserFrom3.ListBox1
        .ColumnCount = 7
        .ColumnHeads = False
        .ColumnWidths = "50,35,50,50,75,89,100"


        For Each oneCell In Sheet2.Range("A2:A" & LR).SpecialCells(xlCellTypeVisible)
            .AddItem CStr(oneCell.Value)
            .List(.ListCount - 1, 1) = oneCell.Offset(0, 1).Value
            .List(.ListCount - 1, 2) = oneCell.Offset(0, 2).Value
            .List(.ListCount - 1, 3) = oneCell.Offset(0, 3).Value
            .List(.ListCount - 1, 4) = oneCell.Offset(0, 4).Value
            .List(.ListCount - 1, 5) = oneCell.Offset(0, 5).Value
            .List(.ListCount - 1, 6) = oneCell.Offset(0, 6).Value
        Next oneCell

    End With
End If

End Sub

Приведенный выше код работает нормально всякий раз, когда я предоставляю действительный ввод в пользовательский интерфейс. Возвращает результат. Когда нечего фильтровать ... т.е. когда результат фильтра равен нулю. и нулевые строки видны, кроме заголовков (в Excel и ListBox).

Однако, после этой видимой ситуации с нулевыми строками, я получаю ошибку при следующем поиске. Listbox загружает все ненужные данные, кроме моих диапазонов (то есть показывает значения из других диапазонов) и показывает ошибку в коде

.List(.ListCount - 1, 6) = oneCell.Offset(0, 6).Value

Сообщение об ошибке «Ошибка времени выполнения 1004 - Ошибка приложения или объекта».

Может кто-нибудь подсказать, в чем проблемы?

1 Ответ

0 голосов
/ 01 ноября 2018

Введите следующий код.

Dim Ws As Worksheet
Set Ws = Sheet2
If Ws.FilterMode Then
    Ws.ShowAllData
End If
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...