#excel #vba
#excel #vba
Вопрос:
Я написал макрос, и он работал нормально, но у меня возникла некоторая проблема, которую я не смог решить. я не смог опубликовать код, потому что в нем почти 800 строк, а макрос предназначен для импорта новых уникальных кодов, поэтому я впервые запустил макрос без фильтрации каких-либо столбцов, поэтому я не смог опубликовать его.он работал нормально, но затем применил автоматический фильтр для столбцов и отфильтровал некоторые строки и запустил запуск макроса, он все еще работал нормально, но когда я запускаю макрос, в следующий раз количество подсчитанных строк отображается по-другому
случай 1
I have 35000 rows in my workbook that are old and run the macro working fine
imported 100 unique rows
случай 2
i have closed and reopened the file and
now applied filters to the sheet and the last row that i can see is 24000
but rows count is still 35000 in vba thats what i wanted , then run macro
it gave 100 and working fine
случай 3
now i have reopened my workbook and run the macro as normal then applied filters
for the sheet that has both newly imported and old entries now it gives 24000
as rows count that is where the last filtered row is
но общее количество должно быть 35000, кто-нибудь может сказать мне, почему?
Комментарии:
1. возможно, вам придется повторно применить фильтры. Когда вы применяете автофильтр, Excel предполагает диапазон, по которому создается фильтр. Если вы добавляете данные при применении фильтра, новый диапазон может не рассматриваться как часть фильтра. Я не знаю, ясно ли я выразился, но вы можете попробовать самостоятельно и посмотреть (без VBA).
2. Если ваш макрос состоит только из одного модуля или функции, то я был бы обеспокоен тем, что он имеет длину 800 строк. Возможно, стоит разбить его на несколько небольших подразделов / функций
Ответ №1:
Я получил решение своего собственного вопроса, когда пробовал его все больше и больше, экспериментируя с новой книгой, и я заметил, что
rows= activesheet.Cells(Rows.count, 1).End(xlUp).Row
Дает 35000, когда фильтры не применяются
но
rows= activesheet.Cells(Rows.count, 1).End(xlUp).Row
Дает 24000, потому что именно там находится последняя строка, которую можно увидеть с помощью filter, и это то, что она возвращает.
Я попробовал это, взяв небольшую новую книгу с некоторыми случайными значениями в 10 ячейках и посчитав, она дала мне 10 в качестве ответа, затем я применил фильтр для значения, где его последнее значение равно 6, затем, к удивлению, он вернул значение как 6, тогда я понял, что он делает
A
1
2
3
4
5
1
6
2
3
4
без фильтров я получил 10 в качестве подсчета, теперь я применил фильтры для значения 1, затем я получил значение 6, то есть последнее значение 1.Будьте осторожны при использовании фильтров 🙂
Я надеюсь, что это поможет некоторым другим людям, которые видят этот пост, Спасибо!