Excel VBA удаляет выбранное значение

#excel #vba

#excel #vba

Вопрос:

У меня есть столбец, который имеет несколько значений, начинающихся с A2. То, что я пытаюсь сделать, это удалить значение, которое собирается из выпадающего списка пользовательской формы, а затем удалить пустую ячейку (сдвинуть вверх). Это то, что я пробовал до сих пор:

 Dim RowCount As Long
Dim Found As Range

RowCount = Worksheets("Config").Range("A1").CurrentRegion.Rows.Count
Set Found = Worksheets("Config").Columns("B").Find(what:=Me.ProjectManagersCombo.Value, LookIn:=xlValues, lookat:=xlWhole)
Found.Delete (xlShiftUp)
  

Однако это не работает, я получаю ошибку 91 во время выполнения. Что не так и как я могу это исправить?

Комментарии:

1. Похоже, что ‘Найдено’ не ‘устанавливается’, поскольку метод ‘Find’ не возвращает никаких результатов, поэтому ‘Найдено. Метод Delete’ не может быть вызван

2. хорошо, но значение из поля со списком определенно содержит значение из списка в нем

3. @Socii Я уже использовал этот метод раньше (правда, не для удаления, а только для сравнения), и он работает, метод удаления — это то, с чем я борюсь

4. Delete Метод отлично работает в вашем коде, поэтому его не нужно менять. Попробуйте проверить, Found стоит Set перед Found.Delete строкой. If Found Is Nothing Then MsgBox "Not Set"

5. Нашел проблему, сумасшедший. Данные находятся в столбце A, я искал в столбце B. Следовательно, найдено не было установлено, поскольку данные были в другом столбце. Теперь это работает. Спасибо

Ответ №1:

 Sub DropDown1_Change()

For a = 2 To 1000000
    If Sheet1.Range("A" amp; a) = _
    Sheet1.Shapes("1").ControlFormat.List(Sheet1.Shapes("1").ControlFormat.ListIndex) _
    Then
        Sheet1.Rows(a).Delete
        Exit For
    End If
Next a

End Sub
  

Вышеуказанный подраздел назначен вашему выпадающему списку, фигуры («1») — это форма выпадающего списка, измените «1» на название фигуры.

Чем короче, тем лучше:

 For a = 2 To 1048576
        If Sheet1.Range("A" amp; a) = Sheet1.Shapes("1").ControlFormat.List(Sheet1.Shapes("1").ControlFormat.ListIndex) Then Sheet1.Rows(a).Delete: Exit For
Next a
  

Комментарии:

1. Я уверен, что это, вероятно, работает, но для удаления значения требуется много работы. Метод, описанный выше в моем оригинальном сообщении, работает, у меня просто была опечатка, и я получил неправильный столбец. Мой метод намного короче цикла for, поскольку он будет использовать только то, что есть, и не будет иметь максимального ограничения

2. 🙂 любой метод (find, search и т.д.) Должен выполнять цикл для поиска объекта поиска.

3. это верно, однако это количество строк, которое вам нужно в коде, чем меньше строк, тем лучше 🙂

4. Хорошо 🙂 но у меня на самом деле есть 3 строки кода, а у вас 5 — часть IF на самом деле представляет собой одну строку

5. Find быстрее, чем цикл: siddharthrout.com/2011/07/14/find-and-findnext-in-excel-vba