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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 03.11.2012, 20:11   #1
LadyInRed
 
Аватар для LadyInRed
 
Регистрация: 03.11.2012
Сообщений: 5
По умолчанию Delphi и макросы в Excel

Необходимо программно в модуль книги добавить макрос запрещающий возможность сохранения изменений. Делаю так:
Код:
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;
При построчном прохождении кода после строки W.Workbooks[1].VBProject.VBComponents.Item(i).Cod eModule.AddFromString(...) в редакторе VBA вижу что нужный код добавился, но после закрытия файла он там не сохраняется(
LadyInRed вне форума Ответить с цитированием
Старый 03.11.2012, 20:39   #2
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Оттого, что Вы код в книгу вписали, макрос в списке не появится.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 03.11.2012, 20:44   #3
LadyInRed
 
Аватар для LadyInRed
 
Регистрация: 03.11.2012
Сообщений: 5
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Оттого, что Вы код в книгу вписали, макрос в списке не появится.
в коде WorkBook'а появляется:
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Cancel = True
End Sub

что нужно сделать чтобы это сохранилось?
Sciv, я понимаю что вопрос наверное очень глупый, но я никогда с этим не сталкивалась =(

Последний раз редактировалось LadyInRed; 03.11.2012 в 20:51.
LadyInRed вне форума Ответить с цитированием
Старый 03.11.2012, 22:20   #4
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

да нет, не такой уж глупый... А вот я, походу, туплю Выскажу предположение, что макрос не сохраняется по причине его же самого - то есть запрещая все изменения в книге, он также запрещает и собственное сохранение... о как!
Философия, однако, какая-то...

Проверить можно просто: сделайте макрос, ничего не запрещающий, просто выводящий сообщение (что-нибудь типа 'Sub Test()' + #13 + ' MsgBox "Привет, мир!"' + #13 + 'End Sub'), и попробуйте сохранить так же, как делаете. Если сохранится - значит, я прав.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 03.11.2012 в 22:22.
Sciv вне форума Ответить с цитированием
Старый 03.11.2012, 22:22   #5
LadyInRed
 
Аватар для LadyInRed
 
Регистрация: 03.11.2012
Сообщений: 5
По умолчанию

Sciv, если я вручную беру и добавляю этот макрос и нажимаю кнопку сохранить он же сохраняется)))

хотя сейчас попробовала добавить другой макрос к книге и он сохранился ... так что Вы видимо правы ... тогда как же запретить дальнейшее сохранение в файле?

Последний раз редактировалось LadyInRed; 03.11.2012 в 22:27.
LadyInRed вне форума Ответить с цитированием
Старый 03.11.2012, 22:26   #6
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
макрос запрещающий возможность сохранения изменений
и

Цитата:
если я вручную беру и добавляю этот макрос и нажимаю кнопку сохранить он же сохраняется

Либо противоречие, либо... Мысль такая, что вручную в экселе Вы сначала сохраняете макрос, а потом всю книгу. Вот во втором случае он срабатывает, а в первом - нет.

С динамическим же макросом из дельфи получается так, что Вы добавляете код в книгу и тут же пытаетесь все сохранить - вот он и отрабатывает положенный ему алгоритм

UPD Развивая мысль, предположу, что нужно использовать что-то типа W.Workbooks[1].VBProject.Save
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...

Последний раз редактировалось Sciv; 03.11.2012 в 22:28.
Sciv вне форума Ответить с цитированием
Старый 03.11.2012, 22:50   #7
LadyInRed
 
Аватар для LadyInRed
 
Регистрация: 03.11.2012
Сообщений: 5
По умолчанию

осталось найти что-нибудь подобное =)

Последний раз редактировалось LadyInRed; 03.11.2012 в 22:54.
LadyInRed вне форума Ответить с цитированием
Старый 03.11.2012, 23:15   #8
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

В редакторе Visual Basic в экселе есть Object Browser (открывается по F2). Там смотрите.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 04.11.2012, 12:21   #9
LadyInRed
 
Аватар для LadyInRed
 
Регистрация: 03.11.2012
Сообщений: 5
По умолчанию

Ничего подходящего я там найти так и не смогла =( нашла выход, но совсем не красивый
программно добавляю следующие макросы
Код:
Public FSave As Integer
Private Sub Workbook_Open()
   FSave = 1
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
   If FSave = 1 Then
       Cancel = True
   End If
End Sub
В итоге получается что на текущий момент FSave=0 и сохранение проходит, а при следующем вызове данного файла уже пользователем сработает Workbook_Open() и FSave станет равно 1, что запретит сохранение файла
LadyInRed вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
макросы в Excel muzon45 Помощь студентам 0 13.12.2011 09:38
Макросы в Excel Jaybe Microsoft Office Excel 2 14.05.2009 15:04
макросы Excel Ravil-022 Помощь студентам 2 28.07.2008 21:12
макросы в Excel Ravil-022 Софт 0 28.07.2008 17:56
макросы в Excel Ravil-022 Софт 0 28.07.2008 17:46