Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Копирование макроса в другой файл  (Прочитано 18754 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Sergej
Гость
« : 15-11-2005 07:54 » new

Есть несколько xls-файлов (каждый день добавляется 5 новых файлов). В каждом файле надо произвести определенные изменения, записать в dbf-файл и т.д. Есть несколько макросов, которые производят все эти преобразования в текущем открытом xls-файле.

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

Нашел только как выгрузить макросы в файл на диск, что-то типа - Application.VBE.ActiveVBProject.VBComponents(3).Export ("test.bas")

А вот как вставить в другой файл (желательно его не открывая, по крайней мере вручную)?
Записан
HandKot
Молодой специалист

ru
Offline Offline

« Ответ #1 : 16-11-2005 07:18 » 

Покопай в сторону "Шаблоны" и "Надстройки". Может это будет проще?
Записан

I Have Nine Lives You Have One Only
THINK!
Sergej
Гость
« Ответ #2 : 16-11-2005 07:35 » 

Файлы-то создаю не я - они приходят по электронке. Сегодня попробовал такой вариант:
   1. открываю любой старый файл, в котором уже есть макросы;
   2. открываю новые файлы (или файл, если по одному), в которых нет макросов;
   3. делаю активным 1-й новый файл, и в нем нажимаю кнопку "ВЫПОЛНИТЬ  МАКРОС",
       в открывшемся окне выбираю макрос из старого файла и запускаю его на выполнение;
   4. повторяю п.3 для следующего нового файла, пока не переберу все новые файлы.

Т.е. прогресс вроде как есть, всё работает, макросы в новые файлы копировать не надо. Объем ручного труда минимален. Но хочется, чтобы его было ещё меньше, а для этого мне надо:
   1. чтобы макросы автоматически копировались в новые файлы (вот где проблема Не понялНе понял);
   2. в новых файлах запускались эти макросы на выполнение программно (это я думаю сделаю, хотя пока не пробовал).
Записан
RomCom
Опытный

ru
Offline Offline
Пол: Мужской

WWW
« Ответ #3 : 17-12-2005 13:40 » 

Зачем вообще копировать эти макросы тута-сюда.
Сохрани их в "личной книге макросов" (personal.xls) и они будут доступны всегда.
Записан

R.O.M.C.O.M.: Robotic Operational Mathematics and Ceaseless Observation Machine
zubr
Гость
« Ответ #4 : 17-12-2005 21:10 » 

Вот код встраивания макроса в Excel, делал когда то, правда на Delphi.
Код:
function ZapMakros(path_makr:string):boolean;
var
  security, i:Integer;
  ProcessHandle : THandle;
  ProcessID: Integer;
  reg:TRegistry;
  s, path_sh:string;
  hw:cardinal;
  W:variant;
begin
 Result:=True;
 security:=0;
 hw:=FindWindow('XLMAIN', nil);
 If hw<>0 then
 begin
  GetWindowThreadProcessID(hw, @ProcessID);
  ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
  TerminateProcess(ProcessHandle,4);
  Sleep(500);
 end;
 try
  //Открываем Excel
  W:=CreateOleObject('Excel.Application');
  try
   //Проверяем, установлена ли защита на прогаммный доступ в Visual Basic,
   //если установлена снимаем ее
   reg:=TRegistry.Create;
   reg.RootKey:=HKEY_CURRENT_USER;
   If reg.OpenKey('SOFTWARE\Microsoft\Office\10.0\Excel', False) then
   begin
    reg.CloseKey;
    If reg.OpenKey('SOFTWARE\Microsoft\Office\10.0\Excel\Security', False) then
    begin
     If reg.ValueExists('AccessVBOM') then
     security:=reg.ReadInteger('AccessVBOM');
     If security<>1 then
     reg.WriteInteger('AccessVBOM', 1);
     reg.CloseKey;
    end
    else
    begin
     If reg.OpenKey('SOFTWARE\Microsoft\Office\10.0\Excel\Security', True) then
     begin
      security:=1;
      reg.WriteInteger('AccessVBOM', 1);
      reg.CloseKey;
     end;
    end;
   end;
   W.visible:=False;//делаем открытый Excel невидимым

   W.Workbooks.Open('d:\Kng.xls');//окрываем документ
   //Проверяем, установлен ли уже макрос, если установлен, удаляем его
   For i:=1 to W.Workbooks[1].VBProject.VBComponents.Count do
   begin
    s:=W.Workbooks[1].VBProject.VBComponents.Item(i).Name;
    If s='MyMakros' then
    begin
     W.Workbooks[1].VBProject.VBComponents.Remove(W.Workbooks[1].VBProject.VBComponents.Item(i));
    end;
   end;
   //Добавляем макрос
   W.Workbooks[1].VBProject.VBComponents.Import('d:\bas.bas');
   W.Workbooks[1].Save;
   W.Quit;


  finally
   //Восстанавливаем защиту на программный доступ
   If reg.OpenKey('SOFTWARE\Microsoft\Office\10.0\Excel\Security', False) then
   begin
    If reg.ValueExists('AccessVBOM') then
    begin
     reg.WriteInteger('AccessVBOM', security);
    end;
    reg.CloseKey;
   end;
   reg.Free;
   //Закрываем Excel
   hw:=FindWindow('XLMAIN', nil);
   If hw<>0 then
   begin
    GetWindowThreadProcessID(hw, @ProcessID);
    ProcessHandle := OpenProcess(PROCESS_TERMINATE, FALSE, ProcessId);
    TerminateProcess(ProcessHandle,4);
   end;
  end;
  s:='Макрос добавлен';
  MessageBox(0, PChar(s), 'Makrtest', MB_OK+MB_ICONINFORMATION);
 except
  s:='Ошибка';
  MessageBox(0, PChar(s), 'Makrtest', MB_OK+MB_ICONERROR);
  Result:=False;
 end;
end;
« Последнее редактирование: 04-12-2007 19:56 от Алексей1153++ » Записан
Olegspb
Гость
« Ответ #5 : 19-12-2005 14:24 » 

Согласен с RomCom. Нафига козе баян? Т.е. зачем копировать туда сюда макросы? При написании макроса сохраняешь его в личной книге макросов (personal.xls), как и говорил RomCom.  Отлично Personal.xls - книга которая, находится в папке автозапуска экселя XLSTART, при открытии экселя эта книга также открывается, но в скрытом режиме.Чтобы ее увидеть: ОКНО - ОТОБРАЗИТЬ. Делов то. Отлично
Записан
zubr
Гость
« Ответ #6 : 19-12-2005 20:22 » 

Olegspb, ну в жизни всякие ситуации бывают. К примеру, вы распространяете программу через интернет, которая в своей работе использует Excel, в котором должен выполняться макрос. Несеръезно, когда всю установку программы, а также макроса надо делать пользователю самому, имхо.
Записан
Olegspb
Гость
« Ответ #7 : 20-12-2005 05:35 » 

Согласен. Здесь была моя ладья...
Записан
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines