Версия для печати темы

Нажмите сюда для просмотра этой темы в оригинальном формате

WinCity.Ru _ Microsoft/Office Excel _ Запрещение обработки Escape в Excel (VBA)

Автор: mokc0der Вторник, 28 Декабря 2004, 13:11

1. Из VBA вызывается внешняя функция в dll. Если во время ее работы нажать на клавиатуре "Esc", то после завершения работы функции Excel показывает окошко - "Code execution canceled". Как сделать так чтоб это окошко не появлялось ?
2. Есть ли возможность получить доступ к коду макросов из другой книги/приложения. Нужно для следующего : Сам я использую код с коментариями, расстановкой таубляции и т.п. в версии котороую буду отдавать хочу все это "почистить" автоматически. Для этого нужен доступ к тексту макросов. Или возможно есть готовые программы ?

Автор: Квазимодо Четверг, 30 Декабря 2004, 12:44

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)

Автор: mokc0der Суббота, 01 Января 2005, 14:21

Квазимодо,
beer.gif beer.gif beer.gif просто супер!!!
1. Помогло
2. Доделываю до моих потребностей: удаление пробелов, исключение комментариев, замены типов(на пример string на $)
Должно получится прикольно сделаю - поделюсь кодом.

Пока появился еще вопрос:
При использовании Application.Dialogs(xlDialogOpen).Show или Workbooks.Open Filename:=fname если книга содержит автоматически макросы (например на открытие) то они запускаются. Как это запретить ?

Автор: Квазимодо Среда, 05 Января 2005, 15:17

Если ты говоришь про процедуры обработки событий (типа 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)