Страница 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 лист "Отчёт" получает нужные данные и форматирование.
Тему можно закрыть, всем в ней написавшим- спасибо!