Форум программистов, компьютерный форум, киберфорум
C++ Builder
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.81/21: Рейтинг темы: голосов - 21, средняя оценка - 4.81
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53

Создание макроса VBA

02.03.2013, 13:47. Показов 4259. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Доброго времени суток!
Каким образом возможно создать посредством builder код макроса на VBA в excel, а затем запустить его. Если с запуском его у меня особых проблем нету, то вот с созданием огромная проблема, вообще это возможно сделать?
заранее благодарю!
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
02.03.2013, 13:47
Ответы с готовыми решениями:

Создание макроса VBA для последовательного сохранения определенной строки из 1000 файлов в один файл
Добрый день, уважаемые форумчане! Мне необходимо создать макрос VBA для последовательного сохранения 12 строки из 1000 файлов формата...

Автозапуск VBA макроса
Народ, как сделать так, чтобы мой макрос на VBA автоматически запускался при открытии Excel-файла, в котором он написан?

Замена макроса на VBA
Всем добрый вечер, Есть такой вопрос, в базе данных есть ленточная форма, в которой есть поле поиска, оно работает при помощи макроса, но...

7
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 11:17
Зачем с помощью билдера? Так, в блокнотике напиши.
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
03.03.2013, 18:22  [ТС]
в моей программе реализован экспорт в эксель, мне необходимо чтобы после экспорта запускался макрос в экселе. обязательное условие программы - создание новой книги экселя, а не открытие уже существующей. (это мне необходимо для построение линии тренда, так как средствами самого билдера линию тренда я построить не смог)
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
03.03.2013, 21:51
Макрос написать программно на основе каких-то условий - это не проблема, это ж просто текст. Вот с excel'ем надо разбираться... думается, можно как-то через DDE давать ему команду на исполнение определенного скрипта. Хотя, это все, конечно, под вопросом, так как скрипты в ms office могут и рубиться по соображениям безопасности.
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
03.03.2013, 23:53  [ТС]
в моем случае запуск макросовв экселе разрешен. с запуском макроса в принципе проблем возникнуть не должно, проблема именно в создании самого макроса в екселе через билдер, как его создать?
0
0 / 0 / 0
Регистрация: 27.03.2012
Сообщений: 53
06.03.2013, 08:31  [ТС]
подскажите где смотреть или спрашивать по поводу внедрения макроса в эксель через билдер?
0
 Аватар для BRcr
4043 / 2333 / 292
Регистрация: 03.02.2011
Сообщений: 5,066
Записей в блоге: 10
06.03.2013, 16:13
Возможно, с делфей кто-нибудь переведет...
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
W:=CreateOleObject('Excel.Application');
W.Workbooks.Open(<имя нужного файла>);
i := W.VBE.ActiveVBProject.VBComponents.Count;
For i:=1 to W.Workbooks[1].VBProject.VBComponents.Count do
   begin
       s:=W.Workbooks[1].VBProject.VBComponents.Item(i).Name;
       If s='ЭтаКнига' then
          begin
    W.Workbooks[1].VBProject.VBComponents.Item(i).CodeModule.AddFromString( 'Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)' + #13 + '   Cancel = True' + #13 + 'End Sub' );
          end;
   end;
   W.Workbooks[1].Save;
   W.Quit;
0
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
 Аватар для volvo
33400 / 21510 / 8236
Регистрация: 22.10.2011
Сообщений: 36,910
Записей в блоге: 12
07.03.2013, 14:00
maxkod, думаешь, удастся таким образом решить твою проблему? Сомневаюсь. Но попробуй:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
    Variant App = CreateOleObject("Excel.Application"); // Запустили Excel
    App.OlePropertyGet("Workbooks").OleFunction("Open", WideString(Path)); // или создать новый
    int сount = App.OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject").
                  OlePropertyGet("VBComponents").OlePropertyGet("Count");
 
    Variant macro;
    const int vbext_ct_StdModule = 1;
 
    for(int i = 1; i <= сount; i++)
    {
        String name = App.OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject").
                        OlePropertyGet("VBComponents").OleFunction("Item", i).OlePropertyGet("Name");
        if(name == "Sheet1")
        {
            macro = App.OlePropertyGet("VBE").OlePropertyGet("ActiveVBProject").OlePropertyGet("VBComponents").OleFunction("Item",i);
            break;
        }
    }
 
    TStringList *L = new TStringList;
    L->Add(L"bla-bla-bla, тут твой макрос");
    macro.OlePropertyGet("CodeModule").OleProcedure("AddFromString", StringToOleStr(L->Text));
    delete L;
 
    // макрос добавлен, запускай
(обработку ошибок добавишь сам)
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
07.03.2013, 14:00
Помогаю со студенческими работами здесь

Перевод макроса в VBA
Форумчане, помогите с правильным кодом VBA: требуется макрос, текст которого в прикреплении, перевести в VBA. Необходимо выбрать...

VBA, создать код макроса
Нужно создать код макроса. Дано натуральное число n и действительное число x , вычислить: ...

Автоматический запуск макроса - VBA
Добрый день! Помогите написать макрос которий будет запускатся только при запуске файла по маске 380*.xls(имя файла каждий день меняется)

Перевод макроса VBA в формат VBS
Помогите, пожалуйста, перевести макрос VBA в формат VBS. Sub Zamena1() ' ' Zamena1 Ìàêðîñ ' 'открывает книгу Workbooks.Open...

Есть ли у VBA распараллеливать выполнение макроса
Собственно вопрос в следующем: Нужно обработать дерево строк( около 500к) за минимальное время. Каждая строка имеет n-ое кол-во подстрок....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при изменении наименования справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере изменения наименования типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
SDL3 для Desktop (MinGW): Вывод текста со шрифтом TTF с помощью библиотеки SDL3_ttf на Си и C++
8Observer8 24.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-text-sdl3-c. zip finish-text-sdl3-cpp. zip
Жизнь в неопределённости
kumehtar 23.03.2026
Жизнь — это постоянное существование в неопределённости. Например, даже если у тебя есть список дел, невозможно дойти до точки, где всё окончательно завершено и больше ничего не осталось. В принципе,. . .
Модель здравоСохранения: работники работают быстрее после её введения.
anaschu 23.03.2026
geJalZw1fLo Корпорация до введения программа здравоохранения имела много невыполненных работниками заданий, после введения программы количество заданий выросло. Но на выплатах по больничным это. . .
Контроль уникальности заводского номера
Maks 23.03.2026
Алгоритм контроля уникальности заводского (или серийного) номера на примере нетипового документа выдачи шин для спецтехники с табличной частью, разработанного в конфигурации КА2. Номеклатура. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru