Excel ЧаВо

Как создать макрос из Delphi? Как выполнить макрос, имеющийся в книге?


Вам не удастся создать макрос программно, т.к. по умолчанию в Excel VBA Project отключен доступ к VBA из программ. Как включить эту возможность, читайте "PRB: Programmatic Access to Office XP VBA Project Is Denied"

Пример создания макроса с параметром и вызов его из программы:

Delphi:

try

VBComp := WB.VBProject.VBComponents.Add(1); // vbext_ct_StdModule

VBComp.Name := 'TestModule'; // запишем туда наш макрос

VBComp.CodeModule.AddFromString( 'Public Sub Test(ByVal ADate As Date)'#10 + #9'MsgBox "Привет из VBA!" & Chr(13) & "Сегодня " & ADate, _'#10 + #9#9'vbInformation, "Test макроса"'#10 + 'End Sub'

); except

ShowMessage('Нужно включить вручную в Excel''е "Доверять доступ к Visual Basic Project"'); end; // выполним макрос

XL.Run('Test', Date());

C#:

Microsoft.Vbe.Interop.VBComponent VBComp = XL.ActiveWorkbook.VBProject.VBComponents.Add( Microsoft.Vbe.Interop.vbext_ComponentType.vbext_ct_StdModule); VBComp.Name = "TestModule"; // запишем туда наш макрос VBComp.CodeModule.AddFromString( "Public Sub Test(ByVal ADate As Date)\n" + "\tMsgBox \"Привет из VBA!\" & Chr(13) & \"Сегодня \" & ADate, _\n" + "\t\tvbInformation, \"Test макроса\"\n" + "End Sub"); // и выполним его передав текущую дату XL.Run("Test", DateTime.Today, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing, Type.Missing );

Если все же вам очень нужно добавить макрос, независимо от настроек доступа к VBA Project, то можно воспользоваться листом макросов xlExcel4MacroSheet. Макроязык представляет собой "команды".

Delphi:

ASheet := WB.Sheets.Add(EmptyParam, WB.Sheets[WB.Sheets.Count], 1, xlExcel4MacroSheet, lcid) as _Worksheet; ASheet.Range['A1', EmptyParam].Formula := '=alert("Привет из Excel4 MacroSheet!")'; ASheet.Range['A2', EmptyParam].Formula := '=return()'; ASheet.Range['A1', EmptyParam].Run( EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam, EmptyParam );

Turn on or off Trust access to Visual Basic Project

How To Create and Call an Excel Macro Programmatically from VB

Programming To The Visual Basic Editor

Run Method



Содержание раздела