Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Цитата
написал:
Схема такая:
посмотрел.....
Мой вывод отрицательный . у MS 100% есть какой то интерпретатор который раскладывает действия в интерфейсе на конкретные значения - в Вашем предыдущем примере посмотрите что пишется если фильтр выбирается выше/ниже среднего, или первые 10, этот выбор преобразован в простые команды типа "=>5" , если вы кодом измените значение в таблице (за рамками видимого) которая влияет на среднее и на жмете на фильтрах обновить - падла перепишет "=>5" на "=>7". То же самое с датами выбрав в множественном фильтре "август 2024" целиком, "2023 год" целиком и 5/08/2025 и 15/08/25 поменяйте  даты кодом что бы изменился набор (например не стало 23года) обновите фильтр, посмотрите что в xml и на экране, верните значения 23 года кодом и обновите фильтр - ПАДЛА восстановит все значения как было в изначальном фильтре..........
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Цитата
написал:
Мы сами можем попробовать ответить,что запоминается о фильтре при сохранении представления (Custom View).
Спасибо за участие.
я в начале темы писал что не готов обрабатывать структуру xml .
Для пользователя файл простой (открывается на любой версии с 2007) , пользователей много , что они сотворят с фильтрами при выборе значений уму не постижимо. Хотел решения только кодом VBA.
Ваше предложение (как я понимаю) на VBA написать дебагер для XML.
Я не так силен в программировании....))
Изменено: leseal - 28.08.2025 12:05:10
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Цитата
написал:
для умных не знаю - просто есть полезный инструмент - который мало используют
Посмотрел - это не то что нужно.
Постараюсь коротко описать почему возникла потребность в таких макросах.
книга подразумевает :
1. импорт данных  из 1с УПП - для  актуализации данных по оплатам и приходам
2. импорт данных из 1с CRM  - для обновления информации по этапам согласования проектов.
3.ввод информации по конкретным  документам Поставщика (руками на основании бумажных носителей), (привязанных к конкретным строкам). таких как "дата ожидаемой первой поставки" и "даты поставки", "дата выставления счета"  поставщиком итп
4.ссылки на папки с картинками к проектам, папки фотоотчетов (данные из CRM)
5. ссылки на папки с сканами документов .
6. выбор файлов которые нужно перенести  в конкретную папку и их копирование туда.
7. открытие конкретных файлов (например договора) при его наличии итд
Всем этим управляет один лист на котором ничего нельзя сделать руками , изменение каждой ячейки это макрос( по левой или правой клавише мышки)  с определенным алгоритмом вопросов/ответов и внесение информации в архив действий и отображение на текущем листе нужного содержимого.
как пример - пользователь закончил вводить данные от конкретного поставщика , по конкретному филиалу, по проектам привязанным к группе товара, менеджеру, состоянию оплат, состоянию поставок итд. Нужно актуализировать данные из внешних источников . выше представленным макросом я запоминаю какие фильтры он использовал, повторно считываю данные из внешних источников , делаю перерасчеты значений в таблицах, включаю нужную сортировку (все законченные проекты/строки уходят вниз), восстанавливаю фильтры, закрываю лист для изменений.
При оформлении такой таблицы используется разные цвета и условное форматирование.
У меня получилось все (в том числе и наборы значков) кроме ячеек с датами..
Предложенный вами вариант не подходит по причине того что каждое изменение придется сохранять в отдельном представлении, а потом искать это представление. предполагаю что мелкософт не ответит на большинство вопросов типа : что такое скрытая строка - это строка скрытая фильтром или строка которой задана высота 0 , и как сработает если два условия (при обновлении) изменили свои значения ?
Еще раз - получилось все кроме работы с ячейками в которых даты . Пока решаю это тем что в таких столбцах хранятся даты как строки , но это лишает возможности пользоваться хорошим интерфейсом работы с датами excel/ Поэтому и родилась эта тема.
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сборка таблиц с разными шапками из нескольких книг, Ключевым - создание справочника, но как если столбцов 250
 
Добрый день.
Решение - три этапа
1. открываем все книги которые интересуют, формируем большую таблицу [файл][таблица][номер столбца][заголовок столбца].
2.сопоставляем все строки с интересующим значением (наименование=артикул, артикул=артикул, товар=артикул. проставленные значения хранятся в отдельной таблице для того что бы при выполнении 1 этапа все не затерлось. Отсутствующие записи  "подсвечиваются " для обязательного заполнения.
3. Если нерасписанных записей нет начинаем открывать только те книги в которых есть таблицы с расписанными столбцами, из таких таблиц читаем данные и вставляем на лист добавляя столбец с указанием "источника"
в итоге получим таблицу с интересующими данными на отдельном листе.
Это в интерфейсе "универсальный" для всех, но с ограничением на количество строк.  Если известны все файлы и таблицы  проще запросами.....
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
макрос для открытия выпадающего списка кнопкой, не открывает выпадающий список
 
Добрый день.
Часто приходится решать аналогичные задачи, поэтому позволю себе высказаться.
Проблемы/нюансы  при постановке задачи:
1. Пользователя(руководителя) не научить думать как Вы и не заставить отказаться от своей логики.
2. Используя общедоступные средства в excel вы рискуете услышать крик "ничего не работает"
Решение.
1. Вызывать необходимое действие (выбор даты) когда это нужно, а не в любое время. Например пользователь добавляет строку вводя "номер документа"(контрагента). Например вводится значение "ООО РогаКопыта" -> выскакивает меню выбора даты-> дата некорректна (сообщение)-> дата корректна -> пишем туда куда нужно. если пытаются изменить "куда нужно" вызываем меню выбора даты. Суть - вы лишаете пользователя возможности ввести некорректные данные, соответственно данные будут полные и ваша таблица всегда будет красивой и обрабатываться без ошибок.
2. В вашем примере - "продвинутый руководитель" не хочет вводить руками а решил скопировать дату из "какой то ячейки" и сразу вставить в "а1", посмотрите результат, точнее будьте готовы к такому... Решение описано выше, а если латать дыры то в макрос допишите восстановление проверки данных после изменения ячейки  "а1"
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Как сцепить разное количество строк?
 
Код
Option Explicit

Sub TargetSub(FirstRow As Long, TarColmn As Long, ResultRange As Range)
'FirstRow - НОМЕР строки в которой есть объединяющий код (там цифирка в примере 1172860220
'TarColmn - НОМЕР столбца в которм объединяемые записи
'ResultRange - адрес верхней левой ячейки куда хотите вставить итоговые данные
Dim WS As Worksheet
Dim LastRow As Long
Dim myRange As Range
Set WS = ThisWorkbook.Worksheets("Лист4")
LastRow = Cells(Rows.Count, 1).End(xlUp).Row
Set myRange = Range((Cells(FirstRow, TarColmn - 1).Address & ":" & Cells(LastRow, TarColmn).Address))
Dim Dict As Object
Set Dict = CreateObject("Scripting.Dictionary")
Dim sKey As String
Dim sS As String: sS = ","
Dim aT As Variant
Dim lR As Long
aT = myRange
If aT(1, 1) = "" Then MsgBox "Исправьте параметры"
For lR = LBound(aT, 1) To UBound(aT, 1)
    If aT(lR, 2) <> "" Then
        If aT(lR, 1) <> "" Then sKey = aT(lR, 1)
        If Dict.exists(sKey) Then Dict.Item(sKey) = Dict.Item(sKey) & sS & CStr(aT(lR, 2)) Else Dict.Add sKey, CStr(aT(lR, 2))
    End If
Next lR
If Dict.Count = 0 Then Exit Sub
ReDim aT(1 To Dict.Count, 1 To 2)
For lR = LBound(Dict.keys) To UBound(Dict.keys)
    aT(lR + 1, 1) = Dict.keys()(lR)
    aT(lR + 1, 2) = Dict.items()(lR)
Next lR
Set myRange = ResultRange.Resize(UBound(aT, 1), UBound(aT, 2))
myRange.ClearContents
myRange.NumberFormat = "@"
myRange = aT
'Debug.Print myRange.Address
End Sub
Sub test()
' Для вашего примера в первом сообщении
Call TargetSub(2, 3, Cells(2, 6))
End Sub
вставьте в модуль файла примера и запустите test
PS писал на коленке - лишние переменные просто удаляйте
Изменено: leseal - 26.08.2025 17:42:06
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Как сцепить разное количество строк?
 
это сделать нужно разово или с завидным постоянством автоматически ?
Если разово и быстро:
1. в отдельном месте напишите формулу "=[ссылка на вышестоящую ячейку] и скопируйте ее
2.выделите весь диапазон во втором столбце от первого кода до последней строки со значением в 3 столбце
3. меню : главная-найти и выделить-выделение группы ячеек-пустые ячейки
4. вставьте в выделенные ячейки формулу. (для последующего использования фильтров можно заменить формулы на значения)
короткий код на vba обращающийся к выделенному диапазону и заполняющему словарь по условию - если новый ключ , запись в значение, если существующий - к имеющемуся значению добавить запятую и значение(нов)
5. циклом переберите все значения словаря в 1 столбец вставляя ключ, во второй значение...
Изменено: leseal - 26.08.2025 14:54:46
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
спасибо за участие НО
1. делаю именно для "умных таблиц"
2. Задать критерий фильтрации не вопрос - скажите как прочитать ранее заданный ?
3. в вашем примере поменяйте цифры на даты и выберите отдельный год, отдельный месяц в другом году, отдельный день в 3 году и обновите свой код что бы было понятно откуда вы взяли "1"

сорян не указал в задании что 2016 версия...
Изменено: leseal - 26.08.2025 14:39:35
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Отдельное пояснение. не важно с каким .Operator мы передаем значения в .criteria1 и .criteria2 - фильтр сработал. Не делая никаких манипуляций - .operator на месте а в .criteria1 и .criteria2 НИЧЕГО НЕТ !
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Цитата
написал:
ысль:попробуйте поработать с представлениями (вкладка Вид)
спасибо за участие , но не уловил .. при чем тут вид ?
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Сохранение и восстановление фильтров VBA в таблицах - проблемы с датами, Написал макрос , вроде работает , но как разобраться с фильтрами по датам не понимаю
 
Добрый день Гуру !
По работе встала задача : запомнить фильтры примененные в таблице, "чейто" сделать, а потом восстановить ранее установленные фильтры.
Что не получилось :
1. работа с датами от слова СОВСЕМ - как занести данные знаю , не понимаю как их прочитать из установленного фильтра. вне зависимости от того в каком столбце фильтрую , где только даты, где смешанные форматы.
2. В интерфейсе есть возможность указать первые  и 10  по умолчанию, если выбираю другое значение (вместо 10), куда оно пишется не понял.
попытка разобраться методом тыка ни к чему не привела. Поиск на форумах привел к цитата :
"...Я выбрал довольно запутанный подход, но, похоже, это единственный способ, который я могу найти.
Получите информацию о фильтре, извлекая XML-данные из файла XLSX, сохраните их где-нибудь, а затем примените тот же фильтр, преобразовав XML в функцию автофильтра VBA. Рабочий код выглядит следующим образом:
Извлеките автофильтр в виде XML-строки. Входными данными функции является таблица, но её можно изменить, чтобы она принимала диапазон."
от предложенного отказался ))
может кто бился с аналогичной задачей - подскажите ?
файл выкладываю в том числе с отладочными макросами и строками.
PS - свою задачу решил(пометив что это ограничения в использовании), просто переношу в свою библиотеку только макросы которые работают на 100%....
PPS - при  написании советовался с deepseek
Изменено: leseal - 26.08.2025 13:04:15
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Есть ли ограничения на заполнение "умных таблиц" макросами ?, на разных строках таблицы макрос ведет себя по разному ..
 
Будете смеяться, но все решилось "тупым" способом.
При поиске возможных ошибок , что бы не ловить когда возникает ошибка , а сразу видеть на каком этапе обработки возникает "незаполнение", во всех условиях добавил указывать на обрабатываемой ячейке (.Rows(lRow).Columns(iNzv)) комментарий с номером этапа.
ВСЕ ЗАПОЛНИЛОСЬ !!
Убрал комментарий  - ошибки вернулись
Тему можно закрывать
всем спасибо за участие
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Есть ли ограничения на заполнение "умных таблиц" макросами ?, на разных строках таблицы макрос ведет себя по разному ..
 
Цитата
написал:
или нетленное "пора менять прокладку между рулём и сиденьем
Лучше и "проще" исправить ошибку в ДНК ))
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Есть ли ограничения на заполнение "умных таблиц" макросами ?, на разных строках таблицы макрос ведет себя по разному ..
 
нет - винда
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Есть ли ограничения на заполнение "умных таблиц" макросами ?, на разных строках таблицы макрос ведет себя по разному ..
 
Добрый день.
Подскажите есть ли ограничения в работе VBA с умными таблицами ?
Субъект: файл в котором  две таблицы - первая источник данных загружаемая запросом из MS Query - ZID.ListObjects("ИД1")
вторая - ORP.ListObjects("TabORP") заполняется вручную и при определенных условиях "дозаполняется" значениями из первой.
заполнение происходит строками аналогичными :
.Rows(lRow).Columns(iIteraciya) = Application.VLookup(.Rows(lRow).Columns(iNzv), ZID.ListObjects("ИД1").DataBodyRange, 4, False)
.Rows(lRow).Columns(iIteraciya).Interior.Color = iZ
все работает прекрасно если количество строк меньше 50, если количество строк становится больше дуркует по черному , начинает пропускать строки, по непонятному алгоритму , причем после блока пропущенных строк 1-2 строки заполняются нормально. Если оставляю только незаполненные строки результат тот - же , то есть первые (примерно) 50 строк заполняются правильно , потом опять котовасия.
Что делал :
перегружал комп
убирал обновления экрана и автоматические вычисления пока работает макрос
отладчиком ловил строку - выполнялись все строки НО не записывались в ячейки !!!

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

Заранее спасибо

ЗЫ ПО все лицензионное MSO 2016 стандартный
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
VBA для рядов данных диагарммы, Подмена значений value и xvalue для рядов диаграммы
 
Код
With ThisWorkbook.Worksheets("Лист1")
  MyChart.SeriesCollection(1).XValues = .Range(.Cells(2, 1), .Cells(4000, 1))
  MyChart.SeriesCollection(1).Values = .Range(.Cells(2, 2), .Cells(4000, 2))
End With

только аккуратно с worksheets - если есть листы диаграмм лучше Sheets(i)

что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
VBA для рядов данных диагарммы, Подмена значений value и xvalue для рядов диаграммы
 
Ссори за первый вопрос - заработался , тут все просто .SeriesCollection(i).XValue и Value
Второй -устал биццо ((
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
VBA для рядов данных диагарммы, Подмена значений value и xvalue для рядов диаграммы
 

Добрый день Гуру !

Помогите решить задачу (чур задачу не комментировать – не я её ставил).

Есть файлы с приложением к проекту по тело-технике. В каждом не менее 170 диаграмм, какие-то на рабочих листах, другие на листах диаграмм. Исходные данные для этих диаграмм находятся вне доступа (у начальных проектировщиков). Диаграммы содержат большое количество «вручную» скорректированных линий (рядов данных). На некоторых листах диаграмм несколько диаграмм. ЧАСТЬ диаграмм необходимо скорректировать – изменить значения одного или несколько рядов данных. Менять диаграммы (оформление и надписи) НЕЛЬЗЯ ! Формат 93 excell. Никогда не занимался диаграммами поэтому и прошу помощи.

Написал макрос для чтения данных из диагарммы

Код
Sub Receive_data_from_diag_to_new_sheet()Application.ScreenUpdating = FalseDim NumberOfRows As IntegerDim X As ObjectDim iCol As IntegerDim stRyad As StringDim stSheet As StringWith Worksheets("ChartData")    .Cells.ClearEnd WithiCol = 0With ActiveChartstSheet = .NameFor Each X In .SeriesCollection    stRyad = CStr(X.Name)    iCol = iCol + 1    NumberOfRows = UBound(X.Values)         With Worksheets("ChartData")            .Cells(1, iCol) = "X-" & stRyad            .Range(.Cells(2, iCol), .Cells(NumberOfRows + 1, iCol)) = Application.Transpose(X.XValues)            iCol = iCol + 1            .Cells(1, iCol) = "Y-" & stRyad            .Range(.Cells(2, iCol), .Cells(NumberOfRows + 1, iCol)) = Application.Transpose(X.Values)        End WithNext XEnd With…….End sub

Так как Excell старый и «свободных» листов на втором проекте меньше 5, а выносить данные в другой файл не хочу решил сделать следующее:

создать три листа. Первый исходные данные, второй корректировки рядов, третий итоговые значения  (ИД + Корректировки) для изменения рядов.

На первом листе данные заполняются «щёлканьем» подлежащих корректировке диаграмм из проекта. Фиксирую данные:

Индексы листов

Индексы диаграмм

Индексы рядов диаграмм (имена)

Координаты по Х для каждого ряда

Координаты для Y для каждого ряда.

Проверяя работу макроса руками менял формулы для каждого ряда (=РЯД([Имя];[Значения X];[Значения Y];[Номер графика]) ). Получается «то что доктор прописал».

Собственно вопросы :

Как эти же значения подставить используя VBA, а не «руки»? ссылаться просто на диапазон данных не подходит так как их крутили-вертели при начальном проектировании как угодно  и нужно менять именно value и Xvalue)

Как циклом обнаружить вторую диаграмму  на листе диаграмм  (пример во вложении)?

Заранее спасибо

PS Сына жалко – он до написания мною макроса заносил значения в таблицы вручную ))

Изменено: leseal - 14.11.2017 09:21:18
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Слетают связи для источника данных в свобных таблицах, При пересылки письмом
 
ссори , но из твоих объяснений я не понимаю проблемы , термины "сводные тяну" мне не понятны.
Ты хочешь отдавать только сводную таблицу или хочешь что бы твои коллеги видели все изменения онлайн ?
если "онлайн" то "деревенский" способ при наличии у коллег доступа к твоей папке:
закрываешь свою книгу на изменения (пароль на изменения - "сохранить как" - "сервис"-"общие параметры"-"пароль для изменения"
далее создаешь (открываешь) файл для коллег
меню "данные"-"из других источников"-"Майкрософт query"-Выбираешь свой файл- ставишь галочку "Только чтение"- выбираешь свою таблицу (источник данных для сводной) жмешь ок
теперь коллеги будут видеть твои изменения после нажатия "записать".
но это совсем криво и по деревенски. Лучше посиди форум почитай. Подобных задач/вопросов было много.
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Проверка прав доступа пользователя к конкретной сетевой папке, Средствами VBA нужна проверка прав доступа к конкретной сетевой папке
 
Спасибо ОГРОМНОЕ
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Проверка прав доступа пользователя к конкретной сетевой папке, Средствами VBA нужна проверка прав доступа к конкретной сетевой папке
 
Добрый день Гуру.
Может кто сталкивался - помогите.
Есть файлы для менеджеров. Они содержат таблицы с внешними источниками данных (файл аксесс для конкретного филиала) часть из которых обновляется при открытии. При запуске книги отрабатывает макрос проверяющий принадлежность пользователя к группе избранных (отдельная группа в AD, к сожалению она одна так как администрировать её в полном объеме у меня нет прав , но добавляются туда пользователи только через мое согласие. Делать дубликат внутри книги с указанием пути  не подходит так как у ряда пользователей есть доступ к нескольким папкам).
По умолчанию после настройки все работает.
Проблема возникает при создании нового файла из файла "шаблона" или при попытке восстановить файл из "шаблона" (все процедуры написаны на VBA). Так как подключения имеют ссылки на конкретные пути , если файл открывает пользователь с другого филиала (нет доступа к данным другого филиала) сыплются ошибки.
Устал объяснять что на все нужно "говорить" "нет" и "отменить" а потом запускать макросы создания или восстановления . Можно ли узнать средствами VBA имеет ли пользователь доступ к конкретной папке. Путь к этой папке всегда есть внутри книги в отдельной ячейке.
Заранее Спасибо.  
Изменено: leseal - 02.12.2016 14:34:58
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Слетают связи для источника данных в свобных таблицах, При пересылки письмом
 
) данные на этом листе откель берутся ? лучше пример киньте - посмотрю
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Слетают связи для источника данных в свобных таблицах, При пересылки письмом
 
Что является источником данных для сводной : внешний источник или таблица внутри файла ? если внешний источник то какой и как построен кэш сводной через query или напрямую обращаетесь к другому файлу ? если через query к экселю то там однозначная ссылка на ваш файл....
или пример давайте или еще раз напишите "что есть проблема" ?
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Создание обновляемой таблицы
 
Сорри модератору, и респект участникам.
Часто на форуме ищу ответы на вопросы и обычно нахожу. Поэтому позволю себе заступиться за местных Гуру и помочь автору.
Просто напишите алгоритм того что вы хотите и Вам помогут.
Из описанного вами понял что есть несколько офисов с одинаковым ПО которые формируют ежедневные отчеты (судя по скриншоту настроено автоматическое формирование в указанное время). Отчет формируется в экселе с автоматическим присвоением имени. Делаю предположение что отчеты записываются на лист с одним и тем же именем. Привлекать разработчиков программы Вы не можете (а это сильно бы упростило задачу). В имени файла есть информация об отправителе и дате формирования отчета. Из вами написанного следует что файлы вы получаете по почте и руками раскладываете по папкам (гениально). Если описанное ИСТИНА тогда примерно Вам нужно следующее :
1. макрос который сформирует вам список файлов из папки хранения данных (вместе с подпапками)
2. макрос который соберет данные из всех однотипных таблиц хранящихся в этих файлах и добавит поле (столбец) указывающий источник данных.
3. макрос или формулы которые разобьют появившееся поле на составляющие поля "офис" и "дата".
на основе имеющейся таблицы строится сводная таблица "и кручу верчу обмануть хочу". Так же желательно из получившейся таблицы удалить не нужные значения ("нэт былэт") это сделает таблицу более читаемой (ИМХО).
Все описанные решения есть на форуме - главное знать что ищете.Удачи
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Формирование массива в памяти, после обработки вставка данных в таблицу, один и тот же макрос с одним и тем же объемом данных работает с разной скоростью
 
Спасибо - потестирую
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Формирование массива в памяти, после обработки вставка данных в таблицу, один и тот же макрос с одним и тем же объемом данных работает с разной скоростью
 
Цитата
Hugo написал: Я уже сказал про другой быстрый метод.
если не тайна - намекни
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Формирование массива в памяти, после обработки вставка данных в таблицу, один и тот же макрос с одним и тем же объемом данных работает с разной скоростью
 
Цитата
Hugo написал: Формируйте новый массив в памяти, выгружайте одним действием.
а в чем выигрыш будет - в том что нужно еще раз перебрать массив , определить новое количество записей, на основании этого создать новый массив , заполнить его циклом аналогичным циклу фиксации значений в ячейках и потом вставлять его - мне кажется что определение заносить данную строку или не заносить по крайней мере не медленнее ...
"Выгружать одним действием" поясните  плизз
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Формирование массива в памяти, после обработки вставка данных в таблицу, один и тот же макрос с одним и тем же объемом данных работает с разной скоростью
 
Все вычисления и обновления экрана выключены в самом начале макроса, Исключения для статусбара - он отображает ход выполнения..
книга большая с определением прав доступа к внешним источникам на основании логина в домене поэтому отправлять файл целиком нет смысла (день тратить на создание локальной версии).
Еще раз - он работает абсолютно нормально и быстро , но спустя какое-то время просто начинает тормозить . Тормозить начинает именно на куске кода который прислал.
Как пример при вставке 4500 строк статусбар невозможно увидеть единицу бегут десятками, через 5 минут работы аналогичный блок будет вставляться по 5 сек на строку (23 ячейки). Сымитировать торможение не всегда получается (если бы получалось была бы примерно понятна проблема).. Так как на следующий запуск опять все летит / или тормозит.. При этом повторюсь - первая часть макроса где заполняется WorkArray по времени работает одинаково !!
Макрос запускается отдельно (он не в теле другого макроса и память другими вычислениями/массивами  занята быть не может.

упрощу вопрос метод занесения ActiveCell.Offset(CurrRow - 1, CurrCol - 1).Value = WorkArray(a, CurrCol) оптимальный или лучше использовать какой-то другой ? В нем не зарыта собака ?
Спасибо за участие ответившим
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Формирование массива в памяти, после обработки вставка данных в таблицу, один и тот же макрос с одним и тем же объемом данных работает с разной скоростью
 
Добрый день Гуру.
Помогите чайнику.
Есть макрос который формирует массив в памяти (примерная размерность 23 поля 700 строк) и после обработки вставляет данные в таблицу.
Поставил отслеживание этапов работы. Обработка массива с вычислениями всегда проходит примерно одинаково по времени, а вот этап записи значений в ячейки отличается в ДЕСЯТКИ РАЗ.
Количество открытых файлов и их размер (как и объем занимаемой памяти не менялся). Кроме экселя ничего не запущено.
Вставляю данные кодом:
Код
    For a = 1 To UBound(WorkArray, 1)
    Application.StatusBar = "adding a line" & a & " of " & z
    DoEvents
    If WorkArray(a, 10) <> 0 Then
         CurrRow = CurrRow + 1
        For CurrCol = 1 To UBound(WorkArray, 2)
                ActiveCell.Offset(CurrRow - 1, CurrCol - 1).Value = WorkArray(a, CurrCol)
        Next
    End If
    Next

Если знаете как исправить - подскажите ПЛИЗЗЗ
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
StatusBar в цикле перестает отображать информацию
 
Спасибо ОГРОМНОЕ
что бы взбодриться достаточно стукнуть голой ногой по ножке кровати
Страницы: 1 2 След.
Наверх