#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