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

Страницы: 1 2 3 След.
ВПР внутри
 
Цитата
написал:
звучит несколько удивительно.
Это так: секунды против полутора часов. Выше выложил макрос. .Find тут пасует. Остается только вставлять формулы ВПР сохранять вместо формул найденные значения.
Еще вариант - задействование движка внешней СУБД. Но это только для многократного использования, а таблица на 900к нужна однократно.
ВПР внутри
 
написал:
Цитата
ну так не надо перебирать , а надо искать в диапазоне.В любом случае , не видя что вы там натворили, никто не скажет в чем ошибка, но выше написал,
вопрос не про ошибку с .find. он работает как надо. попозиционно берет значение из xsInv (20тыс строк) и ищет в xsR (900тыс строк). но делает это в один поток и невообразимо долго. ВПР судя по надписям в статусбаре делает это как минимум в восемь потоков.

код такой:
Скрытый текст

из макроса ВПР еще не пробовал. Но судя комментариям выше однозначно стоит попробовать.

еще пока непонятно, почему исходный файл xsInv из 2МБ после добавления столбца с ВПР становится 50+МБ. xsR при этом порядка 35МБ.
Очевидно что для быстрой работы требуется приличная избыточность данных
Изменено: ae485 - 01.12.2023 09:23:38
ВПР внутри
 
Макрос перебирает все строки из одного файла и ищет попозиционно совпадение (с помощью встроенной функции .Find)
Разница на много порядков  получается - секунды у ВПР против часов у макроса.

вопрос - как устроена ВПР внутри что обеспечивает такую скорость обработки?
ВПР внутри
 
Столкнулся тут с обработкой двух таблиц - 990тыс и 20тыс строк. Работа для ВПР. Удивила скорость работы - пара секунд. 900к на открытие парсился дольше.
Как оно так быстро работает? Для сравнения макрос с .Find работал 1.5 часа.
обратил внимание, что файл с внедренным ВПР (20тыс строк) с 2мб вырос до 50мб.
copy-paste со скрытым объектом excel.app
 
Определенно, по мутности кода из Record Macro можно было догадаться.  
copy-paste со скрытым объектом excel.app
 
Уткнулся в проблему работы с copy-paste со скрытым объектом.  При obj.visible=true работает без проблем, а с false вылетает с ошибкой 'select method of range class failed'.
В чем косяк?

Код
Set objExcel = CreateObject("Excel.Application")
objExcel.Visible = False
    Application.DisplayAlerts = False
    objExcel.DisplayAlerts = False
    Set xsIn = objExcel.Workbooks.Open(tt)
    Set Inv = xsIn.Sheets(1)
    xsIn.Activate  
    Inv.Range(FCol & InfoL & ":" & LCol & InfoL).Select '<< тут вылетает с ошибкой, если objExcel.Visible = false. с true работает нормально.     
objExcel.Selection.Copy
...
Изменено: ae485 - 23.11.2023 12:41:29
Встраивание кода в xlsm с помощью макроса
 
Отлично, то что нужно!
Встраивание кода в xlsm с помощью макроса
 
Сейчас генерится обычный xlsx. Нашел тут несколько полезных улучшений, требующих в том числе вставки макроса.
Подскажите направление как внедрить код при создании файла?
.Replace. Получить количество замен
 
"replaceCount = Application.ReplaceFormat.SubstituteStrings.Count" - что-то похожее находилось поиском, но выдавало ошибку, почему - я не разобрался.
Как кстати будет правильно?
.Replace. Получить количество замен
 
Jack Famous, да, так и сделал - . нашел запись предков 15летней давности для определения кол-ва вхождений символа и подстроки.
Код
k = len(stroka) - len(replace(stroka, simvol, ""))  

k = (len(stroka) - len(replace(stroka, podstroka, "")))/len(podstroka)   


немного громоздко в целом получилось (изначально планировал через метод Replace реализовать.
.Replace. Получить количество замен
 
через .Find, .FindNext и Replace реализовал, в принципе норм, но считает именно ячейки найденные а не символы, т.к. Replacе сразу все символы меняет в одной ячейке.
.Replace. Получить количество замен
 
Подскажите как после выполнения кода
Код
Selection.Replace What:=RuSym(ii), Replacement:=EnSym(ii), MatchCase:=False, LookAt:=xlPart, SearchFormat:=False, ReplaceFormat:=False
получить количество произведенных замен? То, что встроенный Search&Replace отображает всплывающим окном "we  made X replacements".
Слетает цветовое форматирование строки
 
Цитата
написал:
ae485, сначала сцепляйте, потом красьте
Jack Famous, только если два прохода делать - сперва формировать список, потом по нему красить.
Смущает, что сам эксель нормально красит, если это делать руками. Видимо какой-то способ все-таки есть.
Слетает цветовое форматирование строки
 
Подскажите как правильно добавлять данные в ячейку средствами VBA, в которой есть частичное форматирование?


Код
[B1] = "AAA/BBB"
[B2] = "CCC"
With [B1].Characters(Start:=5, Length:=3).Font
 .Color = vbBlue
End With
[B1] = [B1] & "/" & [B2] 'здесь [B1] снова вся становится черной.
Изменено: ae485 - 17.02.2023 16:52:48
Сложный PDF->XLS. Инструментарий.
 
копипастой не взлетело пока. не работал до сих пор с Power Query, это ведь надстройка, которая не идет в штатном дистрибе excel (2019)? или закладка 'power pivot' это оно и есть? В любом случае буду разбираться с вашим примером, спасибо, ибо чувствую будет полезно.

а пока сам парсер я по классике сделал, регэкспами. Вроде работает.
Сложный PDF->XLS. Инструментарий.
 
Есть мутно сформированный PDF, из которого нужно дергать данные: артикулы, их замену (значение в скобках), заказ (ODxxxx), кол-во, цену.

пробовал файнридером распознавать, открывать вордом, сохранять xls из foxit pdf reader. Всегда пока на выходе получается сложнообрабатываемая муть с рандомно объединенными ячейками. Пока лучше чем открыть вордом и копипастом потом в excel вставить не получается.

Подскажите методику (и/или нструментарий) как работать с такими сложными файлами.
Изменено: ae485 - 22.01.2023 13:12:41
Правильное обращение к объектам на странице
 
да, все на поверхности было.

ну и до кучи
Код
Sheets(1).CheckBoxes("Check Box 1").Name = "New Name"
Правильное обращение к объектам на странице
 
Со списком объектов помогло, спасибо.

как-то мне приятней работать с элементами управления формы, они элегантней что ли.

"Sheets(1).CheckBoxes(1).Value" - как бы привязаться теперь к именам, полученным функцией выше.
Правильное обращение к объектам на странице
 
При работе с checkbox приходится обращаться к ним достаточно коряво: Sheets(1).CheckBoxes(1).Value.

Во всех примерах по-умолчанию все обращаются к Checkbox1.Value, что удобней и логичней, но в моем случае так почему-то не работает, возвращает ошибку.

Очевидно, что чего-то не хватает, но чего именно - никак не пойму.
И более глобальный вопрос - как быстро получить список визуальных объектов на странице и как понять что куда относится?
(например если на странице десяток чекбоксов, кпопки и пр.)
RegExp и Lookbehind (?<=), Неполная реализация RegExp?
 
Пытаюсь собрать RegExp, чтобы во фразе "....START 12345-6788-655 END" находилось все, что между START и END.
Отработал паттерн - "(?<=START)(.*?)(?=END)" в онлайн билдере, затягиваю в VBA - получаю ошибку.

Получается что Lookbehind нельзя пользоваться?
Добавление страницы во внешний файл. Файл умирает.
 
Заменил все вызовы по рекомендации (без прямого обращения GetObject к xls файлу, стало ощутимо медленней работать. Если раньше занимало 20 секунд, то сейчас 5 минут.
Почему так происходит?
Добавление страницы во внешний файл. Файл умирает.
 
Да, так работает. Не понял как у меня соседняя процедура работает без дополнительного excel.app, правда только с готовым одним листом.
Изменено: ae485 - 03.12.2022 20:02:10
Добавление страницы во внешний файл. Файл умирает.
 
В трех соснах запутался. Пытаюсь добавить новый лист во внешний файл и файл после этого не открывается. Подскажите что делаю не так.

Рабочий код (локализовал до места, на котором происходит сбой):

Код
Set xsInv = GetObject(filename)
xsInv.Sheets.Add After:=xsInv.Sheets(xsInv.Sheets.Count)
xsInv.Parent.Windows(2).Visible = True
xsInv.Close SaveChanges:=True
Set xsInv = Nothing
При этом работаю на одной странице с этим файлом, вношу изменения - все ок.
Код
xsInv.Sheets(1).Range(InvPerc_c & ii).Interior.Color = 65535
Изменено: ae485 - 03.12.2022 16:50:26
вывести информационное сообщение на время работы макроса
 
Подскажите как вывести информационное сообщение с момента начала работы макроса и автоматом убрать его после завершения. что-то типа 'processing...'.
Свойство Range.Formula и дробные числа, Не суммируются числа с десятичной дробью
 
Цитата
написал:
CStr(Price as Double) - это ужас, вы ещё туда Dim засуньте в скобки
Надеюсь понятно, что это не рабочий код.
Свойство Range.Formula и дробные числа, Не суммируются числа с десятичной дробью
 
Цитата
написал:
а сообщение 3 вас не подтолкнуло к мысли, что в "=SUM...." + CStr(Price as Double) нужно запятую заменить на точку?
Не очень понял о какой запятой точке идет речь. То, что нужно при формировании формулы заменить точки с запятой на запятые - это я знаю.
Задачку решил заменой на Str().
Изменено: ae485 - 09.11.2022 20:24:56
Свойство Range.Formula и дробные числа, Не суммируются числа с десятичной дробью
 
Цитата
написал:
Cells(2, 4).Formula = dg_ves_itog
заменить на
Cells(2, 4).FormulaLocal = dg_ves_itog
А как быть если хочется сделать именно с Formula, чтобы не было проблем с русскоязычным excel? ( SUM vs СУММ) ?

похожая проблема:
.FormulaLocal нормально отрабатывает "=SUM...." + CStr(Price as Double)
но .Formula  "=SUM...." + CStr(Price as Double) ругается на  CStr.
Никак не уловлю отличия, большинство примеров-пояснений оперируют именно FormulaLocal
Изменено: ae485 - 09.11.2022 10:21:20
Cписок всех слов из docx
 
То, что нужно. Все-таки поисковики еще несовершенны и обычный адресный вопрос на форуме гораздо эффективней.
Cписок всех слов из docx
 
Подскажите пожалуйста скрипт для xls, формирующий из docx список всех слов в виде таблицы.
Сравнение двух файлов с подсвечиванием изменений
 
Похоже то, что нужно.
Скриптов не вижу, расскажите что сделали пожалуйста.
Страницы: 1 2 3 След.
Наверх