У меня ошибка 404 при попытке обновить заполненную область списка ActiveX - PullRequest
0 голосов
/ 28 марта 2019

Я работаю над проектом для моего старшего года, и мне приходится иметь дело с элементами управления Activex для моего пользовательского интерфейса.Для удаления одного элемента в списке я написал следующий код:

Когда я отлаживаю код, у меня появляется «ошибка автоматизации 404» в последней части моего кода:

With Worksheets("Solve").OLEObjects("ListBox1")
        .ListFillRange = .ListFillRange
End With

Вот мой код:

Dim i As Integer
Dim lastrow As Integer

lastrow = Sheets("SrData").Cells(Sheets("SrData").Rows.Count, "A").End(xlUp).Row


If MsgBox("Are you sure you want to delete this Sales Representative?", vbYesNo + vbQuestion, "Delete Sales Representative") = vbYes Then

    For i = 2 To lastrow


        sheetcontrol = Sheets("SrData").Cells(i, 1)
        listcontrol = Sheets("Solve").ListBox1.List(Sheets("Solve").ListBox1.ListIndex)

        If sheetcontrol = listcontrol Then

            Sheets("SrData").Activate
            ActiveWorkbook.Names("SrDat").Delete

            Sheets("SrData").Rows(i).Select
            Selection.Delete

            Sheets("SrData").Range(Sheets("SrData").Cells(2, 1), Sheets("SrData").Cells(lastrow - 1, 3)).Select

            ActiveWorkbook.Names.Add Name:="SrDat", RefersTo:=Selection



            End If

    Next i

End If


With Worksheets("Solve").OLEObjects("ListBox1")
    .ListFillRange = .ListFillRange
End With

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я нашел решение для моей проблемы, вот мой отредактированный код.

Set s = Worksheets("Solve")
Set sd = Worksheets("SrData")
Dim lastrow As Integer
Dim target As String
Dim sheetcontrol As String

Application.ScreenUpdating = False

target = s.ListBox1.List(s.ListBox1.ListIndex)
lastrow = sd.Cells(sd.Rows.Count, "A").End(xlUp).Row

If IsNull(ListBox1) Then

    MsgBox "You haven't selected an Sales Representative. Please Select one."

Else

    If MsgBox("Are you sure you want to delete this Sales Representative?", vbYesNo + vbQuestion, "Delete Sales Representative") = vbYes Then

    For i = 2 To lastrow
         sheetcontrol = sd.Cells(i, 1)

         If sheetcontrol = target Then

            s.ListBox1.ListIndex = -1

            sd.Rows(i).Delete
            sd.Activate
            ActiveWorkbook.Names("SrDat").Delete
            Range("'SrData'!$A$2:$C$" & lastrow - 1).Name = "SrDat"
            s.Activate
        End If
     Next i
     End If

End If
refSr
Application.ScreenUpdating = True

в части refSr я делаю

    With Worksheets("Solve").OLEObjects("ListBox1")
        .ListFillRange = .ListFillRange
    End With
0 голосов
/ 28 марта 2019

Я бы попробовал работать с чем-то вроде этого:

For i = ListBox1.ListCount - 1 To 0 Step -1
        If ListBox1.Selected(i) Then
            ListBox1.RemoveItem i
        End If
 Next i

Редактировать: затем вы можете удалить строку на вашем листе «Решить» с вашим кодом и обновить список следующим образом:

Private sub userform_initialize()
With Worksheets("Solve").Range("A2:A" & lastrow) '<-- change with your range
                Me.ListBox1.List = Application.Transpose(.Cells)
                Set listRng = .Cells
    End With 
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...