Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.06.2020, 22:45   #11
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Замечание по коду - перекиньте всё что не относится к листу в стандартный модуль.
Потому что вот например сразу косяк:
Код:
Sub SortirovkaPoDatam()
    Dim PosStr1
    PosStr1 = Sheets("Лист2").UsedRange.Rows.Count
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("F1:F" & PosStr1) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Лист2").Sort
        .SetRange Range("A1:J" & PosStr1)
        .Header = xlGuess
Range("F1:F" & PosStr1) и Range("A1:J" & PosStr1) будут от какого листа браться, как думаете?
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 26.06.2020, 05:51   #12
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Hugo121 Посмотреть сообщение
Замечание по коду - перекиньте всё что не относится к листу в стандартный модуль.
Потому что вот например сразу косяк:
Код:
Sub SortirovkaPoDatam()
    Dim PosStr1
    PosStr1 = Sheets("Лист2").UsedRange.Rows.Count
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Лист2").Sort.SortFields.Add Key:=Range("F1:F" & PosStr1) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:= _
        xlSortTextAsNumbers
    With ActiveWorkbook.Worksheets("Лист2").Sort
        .SetRange Range("A1:J" & PosStr1)
        .Header = xlGuess
Range("F1:F" & PosStr1) и Range("A1:J" & PosStr1) будут от какого листа браться, как думаете?
думаю от второго
Код:
ActiveWorkbook.Worksheets("Лист2").Sort
по крайней мере работает.
я не совсем понимаю суть предложения (тот еще программист)

Последний раз редактировалось Mkoty; 26.06.2020 в 05:55.
Mkoty вне форума Ответить с цитированием
Старый 26.06.2020, 07:27   #13
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

В зависимости от того, какой лист активный в момент запуска макрос, диапазон того листа и будет использоваться.
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.06.2020, 12:34   #14
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
В зависимости от того, какой лист активный в момент запуска макрос, диапазон того листа и будет использоваться.
В момент запуска макроса активен Лист1, а сортировку сделал на Лист2, как и хотел.
Перенесу в стандартный модуль все.
Mkoty вне форума Ответить с цитированием
Старый 26.06.2020, 13:13   #15
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

рекомендуют для сортировка лист2 писать
Код:
With ActiveWorkbook.Worksheets("Лист2").Sort
        .SetRange Worksheets("Лист2").Range("A1:J" & PosStr1)
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 26.06.2020, 13:51   #16
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
рекомендуют для сортировка лист2 писать
Код:
With ActiveWorkbook.Worksheets("Лист2").Sort
        .SetRange Worksheets("Лист2").Range("A1:J" & PosStr1)
Принято.
увидел где у меня ошибка, странно но работало
Mkoty вне форума Ответить с цитированием
Старый 26.06.2020, 20:41   #17
Hugo121
Старожил
 
Регистрация: 11.05.2010
Сообщений: 5,166
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
В зависимости от того, какой лист активный в момент запуска макрос, диапазон того листа и будет использоваться.
- это если код в стандартном модуле. А код не там, о чём я и написал.
webmoney: E265281470651 Z422237915069 R418926282008
Hugo121 вне форума Ответить с цитированием
Старый 27.06.2020, 22:13   #18
alex777555
Пользователь
 
Регистрация: 30.07.2018
Сообщений: 19
По умолчанию

Цитата:
Код:
        Kod = Sheets("Лист2").Range("A" & i)
        Kol = Sheets("Лист2").Range("B" & i)
Конечно будет долго
юзай массивы
alex777555 вне форума Ответить с цитированием
Старый 25.07.2020, 21:05   #19
Fairyman
 
Регистрация: 25.07.2020
Сообщений: 6
По умолчанию

1)
Цитата:
Сообщение от Mkoty Посмотреть сообщение
и вот я еще чего не могу понять
файл с VBA в формате .xlsm весит 43 мегабайта, там текста ноль повдоль.
Попробуйте экспортировать свои макросы в файл, затем создать НОВУЮ книгу и импортировать туда макросы из файлов. Объём скорей всего сильно уменьшится. Возможно это скажется на скорости работы макроса.

2)
Цитата:
Сообщение от Mkoty Посмотреть сообщение
Dim i, b, Kod, Kol, CenaVdoke, CenaOpt, NomerDoka, DataDoka, VidDoka, Klient, Vozvrat, Manager
Все эти переменные без объявления им типа становятся переменными Variant, которые занимают много места в памяти. Вам это точно нужно?

3)Нажмите Ctrl+End чтобы понять сколько ячеек используется. По идее должна показываться последняя нижняя правая ячейка с данными. Если это не так, то выделите все ячейки где нет данных и удалите их через команду Удалить (не Del). Это уменьшит размер файла и по идее немного ускорит работу с файлом.

Тормозит ли сейчас файл?

Последний раз редактировалось Fairyman; 25.07.2020 в 21:15.
Fairyman вне форума Ответить с цитированием
Старый 01.08.2020, 03:53   #20
Mkoty
Пользователь
 
Регистрация: 26.05.2020
Сообщений: 22
По умолчанию

Цитата:
Сообщение от Fairyman Посмотреть сообщение
1)

Попробуйте экспортировать свои макросы в файл, затем создать НОВУЮ книгу и импортировать туда макросы из файлов. Объём скорей всего сильно уменьшится. Возможно это скажется на скорости работы макроса.

2)

Все эти переменные без объявления им типа становятся переменными Variant, которые занимают много места в памяти. Вам это точно нужно?

3)Нажмите Ctrl+End чтобы понять сколько ячеек используется. По идее должна показываться последняя нижняя правая ячейка с данными. Если это не так, то выделите все ячейки где нет данных и удалите их через команду Удалить (не Del). Это уменьшит размер файла и по идее немного ускорит работу с файлом.

Тормозит ли сейчас файл?
1. Я исправил теперь файл весит килобайты
2. посмотрю
3. обработка работает примерно 11 секунд. не быстро

P.s. исправил пункт два ускорил секунды на две - уже хорошо
не могу понять как обозначить эти переменные:
Dim PosStr1
и
Dim tmp

Последний раз редактировалось Mkoty; 01.08.2020 в 04:02.
Mkoty вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка таблицы макросом Dorina Microsoft Office Excel 9 22.04.2011 19:24
Обработка символьных массивов. Вывод кодовой таблицы. Manya-srt Помощь студентам 0 08.11.2010 17:05
обработка таблицы в Microsoft Office Excel 2007 leoleonid Microsoft Office Excel 2 08.09.2010 19:02
Обработка таблицы Anatoly_K Microsoft Office Excel 12 03.06.2010 19:12