Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 23.10.2018, 22:55   #1
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию Delphi, EXCEL и VBA

Доброго дня.
есть такая вот проблема.
создаю выгрузку данных в EXCEL файл для дальнейшего работы с ними.
в это же файл, нужно добавить макрос, который отслеживает изменение в EXCEL файле и красит ячейки в другой цвет.

макрос есть

но вот как его приконектить к екселевскому файлу и заставить работать при открытии файла найти не могу
помогите кто чем может ):
munhauz вне форума Ответить с цитированием
Старый 23.10.2018, 23:47   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от munhauz Посмотреть сообщение
но вот как его приконектить к екселевскому файлу и заставить работать при открытии файла найти не могу
это нужно сделать ручками в Excel или из Delphi ?

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

Как это сделать в Delphi - я не знаю.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2018, 07:09   #3
Aleksandr H.
2 the Nation Glory
Старожил
 
Аватар для Aleksandr H.
 
Регистрация: 27.05.2014
Сообщений: 3,289
По умолчанию

А нельзя выгрузку делать в шаблон ексель файла с уже прописаным макросом?
Кто умер, но не забыт, тот бессмертен.
Лао-Цзы.
Aleksandr H. вне форума Ответить с цитированием
Старый 24.10.2018, 11:25   #4
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
это нужно сделать ручками в Excel или из Delphi ?

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

Как это сделать в Delphi - я не знаю.
это нужно делать программно , если бы ручками то проблем не было бы
munhauz вне форума Ответить с цитированием
Старый 24.10.2018, 11:26   #5
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Aleksandr H. Посмотреть сообщение
А нельзя выгрузку делать в шаблон ексель файла с уже прописаным макросом?
идея хорошая и это будет планом Б , но все таки хотелось бы без шаблонов
munhauz вне форума Ответить с цитированием
Старый 24.10.2018, 11:44   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Код:
VB:=ActiveWorkbook.VBProject.VBComponents.add(1);
VB.Name:=...;
VB.CodeModule.AddFromString(...);
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию

Последний раз редактировалось Аватар; 24.10.2018 в 11:49.
Аватар вне форума Ответить с цитированием
Старый 24.10.2018, 11:50   #7
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
ActiveWorkbook.VBProject.VBComponents.add(1)
Отлично!

кстати, поиском по этим ключевым словам нашлась тема на форуме:
http://www.programmersforum.ru/showthread.php?t=158557
Serge_Bliznykov вне форума Ответить с цитированием
Старый 24.10.2018, 13:40   #8
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Код:
VB:=ActiveWorkbook.VBProject.VBComponents.add(1);
VB.Name:=...;
VB.CodeModule.AddFromString(...);
на имя ругается при выполнении
munhauz вне форума Ответить с цитированием
Старый 24.10.2018, 15:34   #9
munhauz
Пользователь
 
Регистрация: 07.10.2010
Сообщений: 47
По умолчанию

ура я ее победил
Код:
              for i := 1 to WorkBk.VBProject.VBComponents.Count do
                if WorkBk.VBProject.VBComponents.Item(i).name = 'ЭтаКнига' then
                  begin
                    if WorkBk.VBProject.VBComponents.Item(i).CodeModule.CountOfLines <> 0 then
                      WorkBk.VBProject.VBComponents.Item(i).CodeModule.DeleteLines(1, WorkBk.VBProject.VBComponents.Item(i).CodeModule.CountOfLines);
                    WorkBk.VBProject.VBComponents.Item(i).CodeModule.AddFromString('Option Explicit' + #13 + 'Dim vValue ' + #13 + ' Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)' + #13 + ' If Target.Count > 1 Then Exit Sub '
                        + #13 + ' If Target <> vValue Then Target.Interior.Color = vbRed ' + #13 + ' End Sub ' + #13 + #13 + 'Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)' + #13 +
                        ' If Target.Count = 1 Then vValue = Target ' + #13 + ' End Sub ');
                    WorkBk.VBProject.Saved;
                  end;
              
              XLApp.DisplayAlerts[0] := false;
              WorkBk.SaveAs(s, 52, pass, EmptyParam, EmptyParam, EmptyParam, 2, EmptyParam, EmptyParam, EmptyParam, EmptyParam, 0);
посмотреть что значит 52

посмотреть про saveas
munhauz вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
поиск разрыва страницы Delphi VBA Excel Dvoishnik Microsoft Office Excel 9 22.09.2015 18:47
Напишите программку на delphi или vba excel. faraon_forever Помощь студентам 10 13.05.2013 10:03
Совместимость Excel 2007 VBA - Excel 2010 VBA Genas Microsoft Office Excel 2 28.11.2012 15:33
VBA Word,VBA Excel решить 2 задачи fafolo4ka Фриланс 6 05.03.2012 01:15
//Можно ли код Delphi превратить в VBA Excel ocean_regata Общие вопросы Delphi 4 30.01.2009 14:57