Страница 1 из 1
					
				Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 07 окт 2011, 16:30
				 zna
				Здравствуйте, коллеги. 
Имеется ситуация: выгружаем данные из "Галактики" в шаблон FileXltForJava.xlt из JavaScript, который содержит один лист "Отчёт" и нехитрый макрос:
Код: Выделить всё
Sub DownLoad()
    Dim book As String
    Dim sheet As String
    book = Application.ActiveWorkbook.Name
    sheet = Application.ActiveSheet.Name
    Workbooks(book).Activate
    With Application.Workbooks(book)
       Sheets("Gal_VarSheet").Visible = False       'Здесь ошибку выдаёт
       Sheets("Gal_TblSheet").Visible = False
    End With
    Worksheets("Gal_VarSheet").Activate
    Dim strDtb As String, strNom As String
    strDtb = Range("C2").Value
    strNom = Range("C3").Value
    Worksheets("Отчёт").Activate
    Range("F7").Value = strDtb
    Range("D7").Value = strNom
End Sub
После выгрузки формируется файл FileXltForJava1.xls, содержащий уже три листа: "Gal_VarSheet", "Gal_TblSheet" и "Отчёт". 
Проблема: если привязать макрос DownLoad на событие Workbook_Open(), то он запускается до того, как сформируются листы "Gal_VarSheet" и "Gal_TblSheet", и выдаёт ошибку- нет листа.
Вопрос: как запустить DownLoad после того, как появятся все листы?
Вопрос исключительно по VBA, может кто решал такую задачу.
 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 07 окт 2011, 19:36
				 oiko
				Может имеет смысл макрос сразу в шаблоне прописать и какой нибудь ключ выгружать для его активации?
			 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 09 окт 2011, 19:09
				 zna
				oiko писал(а):Может имеет смысл макрос сразу в шаблоне прописать и какой нибудь ключ выгружать для его активации?
Макрос прописан в шаблоне Exel, ключ в виде переменной в него передать не проблема, вопрос в том,как запустить макров на выполнение автоматом.
 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 09 окт 2011, 21:11
				 Den
				Принципиально макросом нужно сделать ?
Дописать свой код в конец макроса служебного того шаблона, пересохранить шаблон, и пусть последний запускается...?
			 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 10 окт 2011, 09:28
				 zna
				Den писал(а):Принципиально макросом нужно сделать ?
Дописать свой код в конец макроса служебного того шаблона, пересохранить шаблон, и пусть последний запускается...?
Да, примерно так я и иду, понимая под "служебным" макросом процедуру реакции Экселя на какое-либо событие. Перенёс обсуждение на специализированный форум:
http://www.planetaexcel.ru/forum.php?thread_id=32621 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 11 окт 2011, 11:46
				 lStep
				насчет VBA не знаю.
А когда из Vip выгружаю, то использую 2 (две) книги. 
Книга1 - без макросов -шаблон, куда выгружаю данные и метку!!!
Книга2 - макросы, которые запускаю для раскрасок листов, где находим метку.
Итог - отчет без макросов и ругани про безопасность.
Полагаю, если в другую книгу сохранить макрос и открыть её после формирования отчета - должно получится.
			 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 12 окт 2011, 10:28
				 Semi-bit
				iStep,
автору надо запустить макрос после формирования XLT-отчёта. Исходника на випе, я так понимаю, у него нет. Надо отлавливать события смены или скрытия листа.
			 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 12 окт 2011, 13:38
				 oiko
				Если вы сделали шаблон на основе стандартного Галакического (или дизайнером не помню) то он содержит Модуль1 вот с таким текстом. Корежте его как хотите и разукрашивайте.
Option Explicit
' Библиотека сервисных функций формирования отчетов
Public Const GalLibName As String = "GalRepBuilder"
Public Const GalLib As String = GalLibName & ".xla!"
' Книга XLS-БД
Dim DBWB As Workbook
' Получить значение переменной XLS-БД
' по наименованию ее диапозона
Function GetDBVar(sDBVar As String) As Variant
GetDBVar = ""
If Not (DBWB Is Nothing) Then
    GetDBVar = Application.Run(GalLib & "GetDBVar", DBWB, sDBVar)
End If
End Function
' Вывести в отчет все переменные и таблицы
'    sRepWS - наименование листа
Sub PrintToSheet(sRepWS As String)
    If Not (DBWB Is Nothing) Then
        Call Application.Run(GalLib & "PrintAllToSWS", DBWB, ThisWorkbook, sRepWS)
    End If
End Sub
' Сформировать отчет
' на основании данных заданной XLS-БД
Sub LoadRepFromDB(sDBWB As String)
Set DBWB = Application.Workbooks(sDBWB)
Dim WB As Worksheet
Call PrintToSheet("Отчет")
Set WB = DBWB.Worksheets("Отчет")
'WB.PageSetup.Orientation = xlPortrait
End Sub
' Сформировать отчет
' на основании данных текущей XLS-БД
Sub LoadReport()
LoadRepFromDB (ThisWorkbook.Name)
ThisWorkbook.Worksheets("Gal_VarSheet").Visible = False
ThisWorkbook.Worksheets("Gal_TblSheet").Visible = False
End Sub
			 
			
					
				Re: Запустить макрос автоматически после выгрузки книги Exel
				Добавлено: 12 окт 2011, 15:29
				 zna
				Итак, опытным путём установлено, что моментом окончания выгрузки из "Галактики" является событие установки определённого диапазона ячеек. Код такой:
Код: Выделить всё
Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
If (Sh.Name = "Gal_VarSheet" And Target.Address = "$A$2:$C$1001") Then
Call DownLoad
End If
End Sub
После отработки DownLoad лист "Отчёт" получает нужные данные и  форматирование.
Тему можно закрыть, всем в ней написавшим- спасибо!