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

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

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

    в какой то степени (в зависимости от алгоритма), это скажется на скорость работы.
    но зато, вы сможете не заботиться о изменении скрипта, при изменении диапазонов.
    Ответ написан
    Комментировать
  • В чем разница между 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 запросом.
    Ответ написан
    Комментировать
  • Как поместить формулу в язык 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")
    Ответ написан
    Комментировать
  • Как получить координаты объектов в Autocad с помощью VBA\Python?

    @Iv_and_S
    Есть ли какое-то свойство для получение координат любого объекта?
    - нет.
    как вы себе представляете одинаковую логику для получения координат полилинии и например вхождения блока.
    сперва поймите что за тип объекта перед вами, затем получайте его "координаты".
    Ответ написан
    Комментировать
  • Как макросом установить фокус на текущий документ?

    @Iv_and_S
    Sub Activate()
    
      Dim wdApp As Word.Application
      Dim wdDoc As Word.Document
      Dim wdDocTwo As Word.Document
    
      Set wdApp = CreateObject("word.Application")
      wdApp.Visible = True
      Set wdDoc = ThisDocument
      Set wdDocTwo = wdApp.Documents.Add
    
    
      wdDocTwo.Activate 'активация окна( но не выводит на передний план)
      AppActivate (wdDocTwo.Name)' выведет окно wdDocTwo на передний план
    End Sub
    Ответ написан