Показать сообщение отдельно
Старый 02.04.2007, 15:41   #26  
AndyD is offline
AndyD
Участник
КОРУС Консалтинг
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
 
2,560 / 2476 (88) +++++++++
Регистрация: 20.08.2005
Для запрета сохранения и распечатки могу предложить такой подход
X++:
static void ExcelMacroEvent(Args _args)
{
    ComExcelDocument_Ru excel = new ComExcelDocument_Ru();
    COM Doc;
    COM app;

    COM Workbook;
    COM prj;
    COM comp;
    COM module;
    COM code;
    Com sheet;
    int Beg;
    Com VBE;
    Com Wnd;
    Com Wnds;
    int i;
    ;
    excel.newFile("", false);
    doc = excel.getComDocument();
    app = doc.Application();
    Workbook = app.ActiveWorkbook();
    prj = Workbook.VBProject();
    VBE = prj.Vbe();
    Wnd = Vbe.MainWindow();
    Wnd.Visible(false);

    comp = prj.VBComponents();
    module = comp.item(1);

    module = comp.item(1);
    code = module.CodeModule();
    Beg = code.CreateEventProc(ComVariant::createFromStr("BeforeSave"), ComVariant::createFromStr("Workbook"))+1;
    Wnd.Visible(false);

    code.InsertLines(Beg+1, "Cancel = True");

    Beg = code.CreateEventProc(ComVariant::createFromStr("BeforePrint"), ComVariant::createFromStr("Workbook"))+1;
    Wnd.Visible(false);
    code.InsertLines(Beg+1, "Cancel = True");

    sheet = app.ActiveSheet();
    sheet.protect();
    Wnds  = Vbe.Windows();
    for (i=1;i<=Wnds.count();i++)
    {
        Wnd  = wnds.item(i);
        Wnd.Close();
    }

    app.DisplayAlerts(false);

    Wnd.Visible(false);

    Workbook.Activate();

    Sheet.enableSelection(-4142);
    excel.visible(true);

/*    app.OnKey("%{F11}");
    app.SendKeys("%{F11}%TE^{TAB} {TAB}1{TAB}1~");
    Wnd.Visible(false);

    Workbook.Activate();

    Workbook.SaveAs("c:\\Книга1.xls");*/
}
В результате сохранить или распечатать будет нельзя, но, если пользователь знает о VBA, то можно открыть проект и удалить эти строки из кода.
В закомментареной части - попытка обхода этой возможности (установка пароля на VBA). Но, к сожалению, для того, чтобы это работало надо сохранить и открыть книгу заново (сохранение выключено из кода, да и добивались обратного)
Ну и повторюсь:
Для того, что бы этот код выполнился, необходимо включить в Excel параметр "Доверять доступ к Visual Basic Project" в форме управления безопасностью макросов (можно поискать на эту тему исследования Gustav)
__________________
Axapta v.3.0 sp5 kr2
За это сообщение автора поблагодарили: kashperuk (5).