• Где найти качественное обучение языку VBA?

    AlexeyKolodchenko
    @AlexeyKolodchenko
    sudo cat /dev/ass | grep “the Adventure”
    Мне (самоучка) очень сильно помог сайт https://vremya-ne-zhdet.ru/vba-excel/soderzhaniye-...
    . Закрыл почти 80% моих потребностей. Остальное поисковик.
    Ответ написан
    Комментировать
  • Что значит Set в языке VBA?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Знак присвоения без SET присваивает скалярное значение. А с SET - ссылку на объект. То есть использовать его или нет - зависит от типа значения справа от знака присвоения. Ну и желаемого результата, конечно (включая и желание не получить ошибку несоответствия типов).

    Пример.

    • Откройте Excel.
    • Откройте окно редактора VBA (Ctrl-F11). Измените размеры окон так, чтобы видеть и таблицу, и редактор.
    • В редакторе добавьте модуль (Insert-Module).
    • Вставьте в модуль следующий текст:
      Sub test()
      Dim x, y
      Range("A1").Value = 123
      x = Range("A1")
      Set y = Range("A1")
      End Sub

    • Поставьте курсор в середину модуля, и начните пошаговое выполнение нажатием F8. Доведите исполнение до финального End Sub (когда эта строка будет подсвечена жёлтым цветом).
    • Откройте окно локальных переменных (View - Locals Window).

    Вы увидите, что первый оператор присвоения присвоил переменной x скалярное значение. Поскольку справа был объект, то в качестве скалярного значения было взято свойство объекта по умолчанию. Для объекта типа Range объектом по умолчанию является его свойство .Value - посему в переменную помещено значение 123. И соответственно переменная имеет тип Variant/Double.

    А вот второй оператор присвоения, использующий Set, поместил во вторую переменную y ссылку на объект Range. И переменная имеет тип Variant/Object/Range.
    Ответ написан
    Комментировать
  • Есть какие нибудь инструменты для работы с VBA?

    BasiC2k
    @BasiC2k
    .NET developer (open to job offers)
    Писать и исполнять код VBA можно только в IDE Office.
    Если у Вас большой проект, посмотрите в сторону реализации проекта на базе VSTO.
    VBA и VB.NET очень похожи, адаптация пройдёт быстро (если есть время, лучше изучить c#).
    Из плюсов - практически неограниченные возможности новой платформы (VBA очень ограничен).
    В VSTO есть неочевидные особенности (обращение к книге, deploy и т.д.), но конечный результат вполне быстр и user frendly.
    Ответ написан
    4 комментария
  • Есть какие нибудь инструменты для работы с VBA?

    @rPman
    Microsoft Visual Studio, умеет работать как с Visual Basic так и с VB.net (VB.net похож на VB script и зачастую код можно даже тупо копировать)

    Начни от сюда
    Ответ написан
    6 комментариев
  • Как сделать поиск в ячейке по знаку " с помощью VBA?

    @Akina
    Сетевой и системный админ, SQL-программист.
    Для поиска двойной кавычки используется строковый литерал из четырёх двойных кавычек
    Instr(start, variable, """")
    Первая и последняя обрамляют литерал, вторая и третья образуют удвоенную двойную кавычку, которая интерпретируется как квотированная/экранированная.

    Есть и более простой способ.
    Instr(start, variable, Chr(34))

    -=о=--=о=--=о=--=о=--=о=--=о=--=о=-

    У меня в ячейки есть текст:
    ДООП "Лабаратория Хлеба" естественно-научной направленности

    Надо что бы она в соседнюю ячейку написал:
    ДООП "Лабаратория Хлеба"

    Если ты точно знаешь, что значение содержит не менее 2 двойных кавычек, и нужно отделить именно до второй включительно, можно так:
    Function get2dquotes(source As String) As String
        Dim tmp() As String
        tmp = Split(source, Chr(34))
        get2dquotes = tmp(0) & Chr(34) & tmp(1) & Chr(34)
    End Function

    И соответственно потом B1=get2dquotes(A1).
    Ответ написан
    1 комментарий
  • Как сделать перенос строки с лист2 на лист1?

    akelsey
    @akelsey
    Давно не писал ничего на VBA для Excel, но помнится там были Range - не нужно проходить циклом, указываете координаты что скопировать и куда скопировать. (Проще всего помню было в Excel - включить запись макроса, сделать действие, подредактировать полученный код под свою задачу)
    Ответ написан
    2 комментария
  • Как сделать Сокращение Полного Фио до первых букв на языке VBA?

    ProgrammerForever
    @ProgrammerForever Куратор тега Excel
    Учитель, автоэлектрик, программист, музыкант
    Function ShortName(fullName As String) As String
      Dim arrNames As Variant
      arrNames = Split(fullName)
      ShortName = arrNames(0) & " " & Left(arrNames(1), 1) & "." & Left(arrNames(2), 1) & "."
    End Function
    Ответ написан
    3 комментария
  • Apps script Как скрыть {текст} в кавычках, при условии что данные в гугл таблицы отсутствуют?

    oshliaer
    @oshliaer Куратор тега Google Apps Script
    Google Products Expert
    В конце всего вместо этого

    body.replaceText("{Фамилия Имя Отчество}", "");
    body.replaceText("{Космодемьянская д. 13 кв. 29}", "");
    body.replaceText("{1111 111111}", "");
    body.replaceText("{почта}", "");
    body.replaceText("{01.01.2000}", "");
    
    body.replaceText("{Фамилия Имя Отчество}", "");
    body.replaceText("{Космодемьянская д. 13 кв. 29}", "");
    body.replaceText("{2222 333333}", "");
    body.replaceText("{мясо}", "");
    body.replaceText("{01.01.2222}", ""); 
    
    body.replaceText("{ДР33.33.3333}", "");
    body.replaceText("{сок}", "");
    body.replaceText("{хлеб}", "");
    body.replaceText("{номер телефона}", "");
    body.replaceText("{адрес}", "");
    body.replaceText("{1 телефон}", "");
    body.replaceText("{2.Фамилия Имя Отчество}", "");
    body.replaceText("{2 телефон}", "");


    Просто вызовите это

    body.replaceText('{.*?}', '');

    Это удалит все неиспользованные шаблоны.
    Ответ написан
    Комментировать