Я получил список (с флажком в нем), и поле списка установлено на 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
Я пытался добиться того, чего я пытаюсь, используя этот метод.
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
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.