Отметьте значение выбранного элемента списка со значением ячейки - PullRequest
0 голосов
/ 08 октября 2019

Я получил список (с флажком в нем), и поле списка установлено на fmMultiSelectMulti.

Что я пытаюсь сделать, если какой-либо элемент выбран в индексе, то проверить значение ячейкиесли то же самое, то будут скопированы все связанные данные в другую рабочую книгу. Мой список заполнен, как показано ниже:

For x = 0 To 13
    'add item to listbox
    Linelistbox.AddItem "01"
    Linelistbox.AddItem "02"
    Linelistbox.AddItem "03"
    Linelistbox.AddItem "04"
    Linelistbox.AddItem "05"
    Linelistbox.AddItem "06"
    Linelistbox.AddItem "07"
    Linelistbox.AddItem "08"
    Linelistbox.AddItem "09"
    Linelistbox.AddItem "10"
    Linelistbox.AddItem "11"
    Linelistbox.AddItem "12"
    Linelistbox.AddItem "13"
    Linelistbox.AddItem "14"

    For y = 0 To Linelistbox.ListCount - 1
    Linelistbox.Selected(y) = True
    Next y

    Exit Sub
Next x

Я пытался добиться того, чего я пытаюсь, используя этот метод.

  1. For z = 0 To Me.Linelistbox.ListCount - 1
        If LineCheckBox.Selected(z) = True Then
            For i = 2 To LastRow
                Set rwSrc = SourceSheet.Rows(i)
                If rwSrc.Cells(4).Value = Fab Then
                    If rwSrc.Cells(5).Value = Linelistbox.List(z).Value Then
                        If rwSrc.Cells(6).Value = Year Then
                            If rwSrc.Cells(7).Value = WW Then
                                If rwSrc.Cells(9).Value = Test Then
                                    erow = DestSheet.Cells(DestSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                                    With DestSheet.Rows(erow)
                                        .Cells(1).Value = rwSrc.Cells(2).Value
                                        'adjust the 50 to match your actual data
                                        .Cells(2).Resize(1, 54) = rwSrc.Cells(10).Resize(1, 54).Value
                                    End With
                                End If
                            End If
                        End If
                    End If
                End If
            Next i
        End If
    Next z
    
  2. Use Select Case

Dim index as integer
index = Linelistbox.ListIndex

Select Case index 
Case Is = 0
If Linelistbox.Selected(0) = True Then
        For i = 2 To LastRow
            Set rwSrc = SourceSheet.Rows(i)
            If rwSrc.Cells(4).Value = Fab Then
                If rwSrc.Cells(5).Value = "01" Then
                    If rwSrc.Cells(6).Value = Year Then
                        If rwSrc.Cells(7).Value = WW Then
                            If rwSrc.Cells(9).Value = Test Then
                                erow = DestSheet.Cells(DestSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                                With DestSheet.Rows(erow)
                                    .Cells(1).Value = rwSrc.Cells(2).Value
                                    'adjust the 50 to match your actual data
                                    .Cells(2).Resize(1, 54) = rwSrc.Cells(10).Resize(1, 54).Value
                                End With
                            End If
                        End If
                    End If
                End If
            End If
        Next i
End If

Case Is = 1
If Linelistbox.Selected(1) = True Then
        For i = 2 To LastRow
            Set rwSrc = SourceSheet.Rows(i)
            If rwSrc.Cells(4).Value = Fab Then
                If rwSrc.Cells(5).Value = "02" Then
                    If rwSrc.Cells(6).Value = Year Then
                        If rwSrc.Cells(7).Value = WW Then
                            If rwSrc.Cells(9).Value = Test Then
                                erow = DestSheet.Cells(DestSheet.Rows.Count, 1).End(xlUp).Offset(1, 0).Row
                                With DestSheet.Rows(erow)
                                    .Cells(1).Value = rwSrc.Cells(2).Value
                                    'adjust the 50 to match your actual data
                                    .Cells(2).Resize(1, 54) = rwSrc.Cells(10).Resize(1, 54).Value
                                End With
                            End If
                        End If
                    End If
                End If
            End If
        Next i
End If
'and so on

При использовании 1-го метода получена ошибка

требуется объект.

Что-то не так с кодом, который я могу исправить? При использовании метода выбора регистра выходные данные будут отображать последний выбранный индекс, например, если я выберу элемент с индексами 0 и 1, он будет копировать данные, связанные только с индексом 1. Выходные данные должны отображать оба элемента, связанные с моим свойством listbox, с множественным выбором.

Есть ли способ, которым я могу сделать это эффективно и программно. Я застрял в этом в течение нескольких дней.

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

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