Есть ли способ сделать эту серию автофильтров более элегантной?

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

var a, b, abort = false;
for (a = 0; a < 10 && !abort; a++) {
    for (b = 0; b < 10 && !abort; b++) {
        if (condition) {
            doSomeThing();
            abort = true;
        }
    }
}
0
задан Cindy Meister 15 January 2019 в 16:27
поделиться

1 ответ

Создайте новую подпрограмму или функцию, используя только три строки, которые повторяются в текущем коде. Определите параметры для вещей, которые меняются. Затем вызовите подпрограмму / функцию для каждого набора параметров. Нечто подобное

'call the sub/function from other code
DoAutoFilterArray ws, 5, "xxxxxx", Cells(2, 5), Cells(lr, 5), Cells(2, 3), Cells(lr, 3)
DoAutoFilterString ws, 18, "xxxxxx", Cells(2, 3), Cells(lr, 3), "FULL ACCOUNT UPGRADE"

Sub DoAutoFilterArray(ws as Worksheet, filterField as Long, criteria as String, _
                 sourceCell1 as Range, sourceCell2 as Range, _
                 targetCell1 as Range, targetCell2 as Range)

  With ws
    .Cells.AutoFilter Field:=filterField, Criteria1:=criteria
    .Range(sourceCell1, sourceCell2).SpecialCells(xlCellTypeVisible).Value = .Range(targetCell1, targetCell2).SpecialCells(xlCellTypeVisible)
    .Cells.Autofiler
  End With
End Sub

Sub DoAutoFilterString(ws as Worksheet, filterField as Long, criteria as String, _
                 sourceCell1 as Range, sourceCell2 as Range, _
                 targetValue as String)

  With ws
    .Cells.AutoFilter Field:=filterField, Criteria1:=criteria
    .Range(sourceCell1, sourceCell2).SpecialCells(xlCellTypeVisible).Value = targetValue
    .Cells.Autofiler
  End With
End Sub
0
ответ дан Cindy Meister 15 January 2019 в 16:27
поделиться
Другие вопросы по тегам:

Похожие вопросы: