Ответы пользователя по тегу Excel
  • Макросов VBA Excel?

    @Iv_and_S
    "захардкодить" диапазоны , как в ответе выше - несложно, способов довольно много.
    строкой, словарем, массивом, да хоть массивом готовых к перебору и подставновке Ranges.

    но если есть возможность, написания логики "нахождения" диапазона - возможно это стоит сделать.
    т.е. динамически искать в листе начало/конец наборов данных.

    в какой то степени (в зависимости от алгоритма), это скажется на скорость работы.
    но зато, вы сможете не заботиться о изменении скрипта, при изменении диапазонов.
    Ответ написан
    Комментировать
  • Как массово переименовать файлы картинок со случайными названиями?

    @Iv_and_S
    Ответ написан
    Комментировать
  • В чем разница между Dim и Const в языке VBA?

    @Iv_and_S
    Const - константы, а не литералы. после инициализиции их не изменить. плюс как то по другому храняться в памяти.
    'Declare Private Integer constant. 
    Private Const MyInt As Integer = 5 
    MyInt = 6 ' эта строка не выполнится.

    DIM - объявление переменных.
    'Declare Private Integer variable. 
    Dim MyInt As Integer
    MyInt  = 5
    MyInt = 6

    P.S. вопрос из серии "мне очень сильно лень искать хоть что то и минимально читать документацию".
    зачем создавать вопрос если ответ в первой ссылке в поиске.
    Ответ написан
    1 комментарий
  • Можно ли заинклудить файл с кодом в VBA Excel?

    @Iv_and_S
    вы можете динамически загружать модули VBA храня их в файлах.
    выглядит это примерно так:
    'загружает - вызывает функцию - удаляет модуль
    Sub Main()
        Dim oXL As Application
        Set oXL = Application
        
        Dim vbMod As Object
        Set vbMod = oXL.VBE.ActiveVBProject.VBComponents.Import("C:\Users\User\Desktop\Hi.bas")
        oXL.Run "MsgShow"
        
        oXL.VBE.ActiveVBProject.VBComponents.Remove vbMod
    End Sub

    'код который нужно вызвать, нужно хранить в файле с расширением .bas
    Sub MsgShow()
        MsgBox "Hi from file"
    End Sub

    P.S.
    НО, сомневаюсь что решение вашей задачи в этом.
    Если какой то код "не впихивается" в редактор, он сильно врядли будет работать из файла.
    VBA вполне себе позволяет встраивать SQL запросы.
    думаю у вас какая то проблема с синтаксисом либо кодировкой.
    лучше дополнить ваш вопрос SQL запросом.
    Ответ написан
    Комментировать
  • Сравнить 2 таблицы в Excel?

    @Iv_and_S
    Вариантов много. выбор в т.ч. зависит от того что "под рукой" и на что есть компетенции у исполнителя.
    К тому же не указано куда и в каком виде вывести эту разницу.
    все сводится к тому что нужно данные нормализовать, сравнить, и вывести разницу.
    - Power Query/Pivot (нативно в рамках Excel)
    - VBA (нативно в рамках Excel)
    - запихать в БД, потом SQL (надо БД)
    - любой ЯП который под рукой и умеет читать эксель.
    Ответ написан
    Комментировать
  • Как поместить формулу в язык vba?

    @Iv_and_S
    Будьте добры подскажите как правильно вставить формулу ?

    собрать правильную строку формулы , путем конкатенации строк.
    сперва почитать про конкатенацию строк в VBA, ссылки приводить не буду.

    самой ячейке будет результат текстом или формул прям ?

    в случае использования Range("D3").FormulaLocal будет формула.
    в случае использования Range("D3").Value будет текст либо ошибка, если формулу запихать.

    Вот простейший пример.
    // исходная формула: =СУММ(C2:C10)
    Dim startSumRow As Integer
    Dim endSumRow As Integer
    startSumRow = 2
    endSumRow = 10
    Range("D3").FormulaLocal = "=СУММ(C" & CStr(startSumRow) & ":C" & CStr(endSumRow) & ")"
    Ответ написан
    Комментировать
  • Как найти все значения в таблице Excel через VBA скрипт и выполнить над ними RegEx?

    @Iv_and_S
    Как найти все значения в таблице Excel

    найти? или взять диапазон?
    Взять диапазон это объект Rangeв VBA.
    после получения данных, делаем над ними операции.
    Создание объекта RegExp используя позднее связывание:
    Dim myRegExp As Object
    Set myRegExp = CreateObject("VBScript.RegExp")
    Ответ написан
    Комментировать
  • Почему Excel не сохраняет csv с запятой?

    @Iv_and_S
    использовать OpenOffice и/или LibreOffice.
    там разделители задаются явно.
    правда там есть какие то ограничения на кол-во строк(точную цифру не помню)ю
    Ответ написан
    Комментировать
  • Как устранить ошибку при запуске vbs файла Планировщиком заданий?

    @Iv_and_S
    В процессе переписки ( в соседнем ответе) и экспериментально выяснилось, что прочиной не корректной работы, был остававшийся в памяти "фантомный" процесс Excel который не завершался после выполнения скрипта. Потому ошибка и проявлялась со второго раза выполнения.

    вероятной причиной того, что процесс оставался висеть, является в чем то не корректный скрипт.
    По всей видимости в памяти остается какой то объект , который мешает завершиться Excel процессу корректно.
    пути решения два:
    1) пытаться таки сделать корректный скрипт. Это правильно, но заморочно.
    последний вариант приложен , но он таки верно не заработал.
    spoiler

    Call Run_macros
    
    Sub Run_macros()
    
        Dim objExcel
        Dim Op_writ
        Dim Wb
        
       'запускаем Excel-процесс
        Set objExcel = CreateObject ("Excel.Application")
        objExcel.Visible = true    
        Op_writ="R:\инста\ЭКСЕЛЬ\АНАЛИЗ\НОВЫЙПОДПИСЧИКИ17"
        Set Wb = objExcel.Workbooks.Open (Op_writ)
       'запуск макроса
       objExcel.run "ОБН_данных"
       'сохранение файла
       objExcel.Workbooks("НОВЫЙПОДПИСЧИКИ17.xlsm").Save
       'по завершению закрываем документ. Пишем только имя файла, без пути
       objExcel.Workbooks("НОВЫЙПОДПИСЧИКИ17.xlsm").Close(false)
       'закрываем Excel-процесс
      objExcel.Quit
      Set objExcel = Nothing 
      Set Wb = Nothing
    End Sub


    2) скриптом "прибивать" процесс. просто, надежно, но эт как бы костыль. Хотя судя по интернетам, ряд людей столкнувшихся с этой проблемой, выбрали именно этот путь).

    Ряд пояснений о проблеме, как сделать корректный скрипт, а также как "прибить" процесс - по ссылкам:
    https://stackoverflow.com/questions/25147242/excel...
    https://stackoverflow.com/questions/26303173/how-c...
    Ответ написан
    Комментировать
  • Как при помощи Python найти во множестве docx документах все упомянутые города и улицы?

    @Iv_and_S
    1. Читаем текст pip install python-docx
    2. пишем регулярку по поиску нужной подстроки. это самая заморочная часть. тут надо смотреть структуру документов , если есть какие то общие шаблоны типа "присутствует..." или "г. * ул. * цифры улицы" то надо цепляться за них в регулярке. также для проверки можно сверять найденные регуляркой значения, со списком городов, для проверки корректности результата.
    только его надо где то предварительно стянуть)
    3. пишем в excelpip install openpyxl
    Все это в цикле по одному документу , и второй уровень цикла - по параграфам в документе.
    Ответ написан
    1 комментарий
  • Как массово(автоматически) изменить несколько таблиц Excel?

    @Iv_and_S
    не надо никаких PowerShell. это элементарно на VBA. перебираем файлы , открываем, выполняем то что требуется, сохраняем, закрываем.
    Ответ написан
    Комментировать
  • Контур Бухгалтерия, как выгрузить первичку?

    @Iv_and_S
    если это можно сделать руками по одному документу, и есть логика перебора всех документов, значит скорее всего это можно сделать с помощью эмуляции действий пользователя( RPA, Selenium, Zennoposter и т.д.).
    Ответ написан
    Комментировать
  • Возможен ли вывод таблицы со стилями из xlsx или google таблиц? Больше интересует именно из xlsx?

    @Iv_and_S
    Возможно ли это вообще?

    Возможно. не вижу какой то принципиальной проблемы.
    Стиль в exel/google sheet это набор характеристик (цвет,заливка,границы и т.д.)- Вам нужно парсить эти характеристики. Через API это доступно.
    Умеет ли это делать конкретный фреймворк или библиотека из коробки вот это вопрос.
    https://phpspreadsheet.readthedocs.io/en/develop/t... - здесь же есть какие то ->getActiveSheet()->getStyle('B2') - что не так с ними?
    Ответ написан