Ошибка при попытке выполнить цикл через автофильтрованные ячейки с помощью vba

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

for x=1 to currentFilter.rows.count 

а также

 for each x in currentFilter.rows 

Но независимо от того, как я пытался, я получаю какую-то ошибку при попытке избавиться от первого символа (двоеточия), используя (основной смысл):

 Cell Value = Right(Cell Value, Len(Cell Value) - InStr(Cell Value, ",", vbTextCompare)) 

Мой полный код выглядит следующим образом:

 Sub PRTCheck() 'Column AN is Production Time & Column AP is Rush Time Dim endRange As Integer, ShipandRush As Range, CommaColons As Collection, cell, i endRange = ActiveSheet.Cells(Rows.count, "AN").End(xlUp).Row Set ShipandRush = Union(ActiveSheet.Range("AN2:AN" & endRange), ActiveSheet.Range("AP2:AP" & endRange)) ShipandRush.NumberFormat = "@" Set CommaColons = FindAllMatches(ShipandRush, ",:") If Not CommaColons Is Nothing Then Dim times() As String For Each cell In CommaColons times = Split(cell.Value, ",") For i = LBound(times) To UBound(times) If InStr(times(i), ":") = 1 Then times(i) = "" Next cell.Value = Join(times, ",") Do While InStr(cell.Value, ",,") <> 0 cell.Value = Replace(cell.Value, ",,", ",", vbTextCompare) Loop If InStr(cell.Value, ",") = 1 Then cell.Value = Right(cell.Value, Len(cell.Value) - 1) End If If InStr(Len(cell.Value), cell.Value, ",") = Len(cell.Value) Then cell.Value = Left(cell.Value, Len(cell.Value) - 1) End If Next cell End If Set ShipandRush = ActiveSheet.Range("AN1:AN" & endRange) Dim currentFilter As Range, r ShipandRush.AutoFilter Field:=1, Criteria1:=":*" 'Starts with colon Set currentFilter = ShipandRush.Offset(1).SpecialCells(xlCellTypeVisible) If currentFilter.Rows.count > 0 Then For r = 1 To currentFilter.Rows.count '-------Error occurs on the next line------- currentFilter.Cells(r).Value = Right(currentFilter.Cells(r).Value, Len(currentFilter.Cells(r).Value) - InStr(currentFilter.Cells(r).Value, ",", vbTextCompare)) Next End If ActiveSheet.AutoFilterMode = False End Sub 'Custom find and replace that circumvents 255 character find limitation Function FindAllMatches(rng As Range, txt As String) As Collection Dim rv As New Collection, f As Range, addr As String, txtSrch As String Dim IsLong As Boolean IsLong = Len(txt) > 250 txtSrch = IIf(IsLong, Left(txt, 250), txt) Set f = rng.Find(what:=txtSrch, lookat:=xlPart, LookIn:=xlValues, MatchCase:=False) Do While Not f Is Nothing If f.Address(False, False) = addr Then Exit Do If Len(addr) = 0 Then addr = f.Address(False, False) 'check for the *full* value (case-insensitive) If InStr(1, f.Value, txt, vbTextCompare) > 0 Then rv.Add f Set f = rng.FindNext(After:=f) Loop Set FindAllMatches = rv End Function 

Мой вопрос:

Что я делаю не так? Как я могу перебирать каждое значение в видимых ячейках и успешно выполнять описанную выше формулу?

Вы действительно имеете дело только с одним столбцом, но я постараюсь придерживаться вашего метода цикла через строки вместо ячеек, которые в этом случае по существу одинаковы (хотя Range.Rows – это не то же самое, что Range.Cells ).

Нераздельные диапазоны должны быть циклически пройдены с помощью свойства Range.Areas сначала, а затем свойство Range.Rows в каждой области.

 dim a as long, r as long with currentFilter If .Rows.count > 0 Then for a = 1 to .Areas.count For r = 1 To .Areas(a).Rows.count .Areas(a).Rows(r).Cells(1).Value = _ Right(.Areas(a).Rows(r).Cells(1).Value, _ Len(.Areas(a).Rows(r).Cells(1).Value) - _ InStr(1, .Areas(a).Rows(r).Cells(1).Value, ",")) Next r Next a End If end with 

Это может быть проще просто использовать для каждого … Далее.

 dim cfr as range with currentFilter for each cfr in .Cells cfr = Right(cfr.Value, Len(cfr.Value) - InStr(1, cfr.Value, ",")) Next cfr end with 
  • Автоматический фильтр Excel с несколькими критериями
  • Ошибка 1400: нет такой ячейки, которая удовлетворяет критериям
  • Код VBA для обновления автофильтров без повторного применения
  • Установка автоматической фильтрации нескольких подстановочных знаков
  • Переход к следующей видимой ячейке с использованием смещения
  • Excel VBA, фильтрующий рабочий лист на основе ряда ячеек в другой книге
  • Автофильтр (или цикл) и копирование в другую книгу на основе значения ячейки
  • Как сделать Selection.AutoFilter начинается в строке 3 вместо строки 1
  • очистить ячейки при сохранении настроек автофильтра?
  • Excel Autofilter все, кроме значения переменной
  • Исключения автофильтра с более чем двумя критериями
  • Interesting Posts

    Загрузите файл excel с сервера sFtp с помощью командного файла

    Проверка данных Excel – разрешение нескольких типов данных

    ExcelCom пишет формулу в ячейку, приводит к #name?

    Excel VBA wordEditor Paste Разбивает гиперссылки с помощью подчёркивания («_»)

    Используйте только месяц и год с даты в качестве критериев в счетах?

    Оптимизация макроса VBA

    Перечисление для Application.InputBox

    C # OpenXml Excel Creation – могу ли я установить его в «Format as table»?

    Знак евро в CSV-файле не отображается корректно в Mac Excel 2011

    Как разделить текст на другой столбец или удалить текст из исходного столбца?

    Как бы вы описали объект базы данных, который может быть затратом или прибылью?

    Фильтровать данные и скопировать результат из одной книги в другую с помощью VBA

    Показать файл Excel на aspx-странице, как есть, например страницу на странице

    Как отключить autocorrect в VBA в Excel 2007?

    Могу ли я установить функцию в качестве критерия в автофильтре в excel?

    Давайте будем гением компьютера.