1. Из VBA вызывается внешняя функция в dll. Если во время ее работы нажать на клавиатуре "Esc", то после завершения работы функции Excel показывает окошко - "Code execution canceled". Как сделать так чтоб это окошко не появлялось ?
2. Есть ли возможность получить доступ к коду макросов из другой книги/приложения. Нужно для следующего : Сам я использую код с коментариями, расстановкой таубляции и т.п. в версии котороую буду отдавать хочу все это "почистить" автоматически. Для этого нужен доступ к тексту макросов. Или возможно есть готовые программы ?
mokc0der,
1. Попробуй поставить перед вызовом функции:
Application.EnableCancelKey = xlDisabled
,только не забудь после вызова вернуть этому свойству значение xlInterrupt.
2. Подкину простой пример (доступ к тексту макросов из той же книги, строки обрезаются слева, комментарии не анализируются):
Sub TrimLeftSpaces()
Dim P As VBComponent
Dim P1 As CodeModule
Dim i, j, Cnt, LineCnt As Integer
Dim S As String
Cnt = Application.VBE.ActiveVBProject.VBComponents.Count
For i = 1 To Cnt
Set P = Application.VBE.ActiveVBProject.VBComponents(i)
If P.Type = vbext_ct_StdModule Then
'это только в стандартных модулях; сменишь условие, если нужно обработать, например, модули кода для листов
Set P1 = P.CodeModule
LineCnt = P1.CountOfLines
For j = 1 To LineCnt
S = P1.Lines(j, 1)
P1.DeleteLines j
P1.InsertLines j, LTrim(S)
Next
End If
Next
End Sub
Только нужно подключить в редакторе VB Tools -> References -> Microsoft Visual Basic for Application Extensibility x.x (зависит от версии;
у меня Office 2000, и файл лежит в Program Files\Common Files\Microsoft Shared\VBA\VBA6\vbe6ext.olb)
Квазимодо,
просто супер!!!
1. Помогло
2. Доделываю до моих потребностей: удаление пробелов, исключение комментариев, замены типов(на пример string на $)
Должно получится прикольно сделаю - поделюсь кодом.
Пока появился еще вопрос:
При использовании Application.Dialogs(xlDialogOpen).Show или Workbooks.Open Filename:=fname если книга содержит автоматически макросы (например на открытие) то они запускаются. Как это запретить ?
Если ты говоришь про процедуры обработки событий (типа Workbook_Open), то отключается это так:
Application.EnableEvents = False
Application.Dialogs(xlDialogOpen).Show
Application.EnableEvents = True
, после чего в только что открытой книге события, относящиеся к листам или диаграммам, будут обрабатываться.
Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)