Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.08.2010, 13:40   #1
BloodNick
 
Регистрация: 31.08.2010
Сообщений: 3
Вопрос Автозапуск

Здравствуйте!
Написал следующий макрос:
Код:
    
    'Запустится ли программа
    Range("А1").Select
    If Range("A1").Value <> "Группа материала по виду" Then
    'Удаляем ненужные вещи
    If Range("L1").Value = "Код заготовки" Then
    Cells.Select
    Selection.Columns.AutoFit
    Columns("A:C").Select
    Range("A:C,F:F").Select
    Range("F1").Activate
    Range("A:C,F:F,J:J").Select
    Range("J1").Activate
    Range("A:C,F:F,J:J,L:Q").Select
    Range("L1").Activate
    Range("A:C,F:F,J:J,L:Q,T:W").Select
    Range("T1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("A1:H1").Select
    Range("H1").Activate
    ActiveWindow.SplitRow = 0.91304347826087
    ActiveWindow.FreezePanes = True
    End If
    If Range("L1").Value = "ЕВ" Then
    Cells.Select
    Selection.Columns.AutoFit
    Columns("A:C").Select
    Range("A:C,F:F,J:J").Select
    Range("J1").Activate
    Range("A:C,F:F,J:J,L:M").Select
    Range("L1").Activate
    Range("A:C,F:F,J:J,L:M,P:T").Select
    Range("P1").Activate
    Range("A:C,F:F,J:J,L:M,P:T,U:V").Select
    Range("U1").Activate
    Selection.Delete Shift:=xlToLeft
    Range("Z24").Select
    End If
    'Делаем сортировку
    Dim gg As Integer
    gg = Range("C" & Rows.Count).End(xlUp).Row
    Range("A2:H" & gg).Select
    Selection.Sort Key1:=Range("F2"), Order1:=xlAscending, Header:=xlGuess, _
        OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
        DataOption1:=xlSortNormal
    
    'Удаляем пустые строки.
    Dim i, ii, st, ee, kk, stk As Integer
    st = 1
    ee = Range("D" & Rows.Count).End(xlUp).Row
    kk = 1
    For i = 2 To ee
    If Range("F" & i).Value = "" Then
       st = st + 1
    End If
    Next i
    For ii = 2 To 2222
    If Range("F" & ii).Value <> "" Then
    kk = kk + 1
    End If
    Next ii
    If Range("F2").Value = "" Then
    Rows("2:" & st).Select
    Selection.Delete Shift:=xlUp
    End If
    If Range("F2").Value <> "" Then
    stk = kk + 1
    Rows("2222:" & stk).Select
    Selection.Delete Shift:=xlUp
    End If
    
    'Переводим в числа ошибки.
    Dim r As Integer
    r = Range("E" & Rows.Count).End(xlUp).Row
    Range("I5").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("I5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("D2").Select
    Range("D2:E" & r).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
    
    'Переводим в числа ошибки.
    Dim f As Integer
    f = Range("H" & Rows.Count).End(xlUp).Row
    Range("I5").Select
    ActiveCell.FormulaR1C1 = "1"
    Range("I5").Select
    Application.CutCopyMode = False
    Selection.Copy
    Range("G2").Select
    Range("G2:H" & f).Select
    Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlMultiply, _
    SkipBlanks:=False, Transpose:=False
    Range("I5").Select
    Selection.ClearContents   
    
    'Итоги
    Columns("A:H").Select
    Selection.Subtotal GroupBy:=6, Function:=xlSum, TotalList:=Array(8), _
        Replace:=True, PageBreaks:=False, SummaryBelowData:=False
    ActiveSheet.Outline.ShowLevels RowLevels:=2
    Range("H1").Select
    End If
Он полностью работает и устраивает меня...
Нужно что бы этот макрос автоматически запускался при открытии АБСОЛЮТНО любого фалйа Excel!!
пытался релиазовать через "файл надстройки" нефига не пол-ся...подскажите плиз что делать!?!?
з.ы. только пожалуйста поподробнее че и куда..а то для меня это все немного сложновато из-за того что все это делаю в 1й раз...
BloodNick вне форума Ответить с цитированием
Старый 31.08.2010, 13:55   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Запускаешь редактор Васика
В Project Explorer открываешь проект своих надстроек
Двойной клик на "ЭтаКнига"
В открывшемся окошке вводишь
Код:
Private Sub Workbook_Open()
    'Вызов своей функции
End Sub
Только внеси проверки тот ли лист обрабатывается
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 31.08.2010, 14:15   #3
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
Запускаешь редактор Васика
В Project Explorer открываешь проект своих надстроек
Двойной клик на "ЭтаКнига"
Skif-F, если воспользоваться Вашим методом, то код будет запускаться лишь один раз - при открытии самой надстройки. А человеку надо, чтобы при открытии любой книги срабатывал. Я здесь ответил.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru
The_Prist вне форума Ответить с цитированием
Старый 31.08.2010, 14:15   #4
BloodNick
 
Регистрация: 31.08.2010
Сообщений: 3
По умолчанию

Ув. Skif-F ответ неочем...это нужно заранее в файле.. а мне нужно что бы мне приносят ЛЮБОЙ ФАЙЛ который я РАНЬШЕ НЕКОГДА НЕ ВИДАЛ!! открываю и он хоп делаем МОЙ макрос!!
BloodNick вне форума Ответить с цитированием
Старый 31.08.2010, 14:24   #5
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Для The_Prist
Я тоже так думал, а потом блокировку ставить пришлось, потому что на панели инструментов было 5 добавленных мной!!

Для BloodNick
В том-то и смысл что это вставляется в файл надстроек, который подключается автоматически при запуске Excel
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 31.08.2010, 14:51   #6
BloodNick
 
Регистрация: 31.08.2010
Сообщений: 3
По умолчанию

автозапуск сделал но теперь мой макрос выдает вот эту ошибку:
Код:
Run-time error '1004'
Method 'Range' of 'object'_Global' failed
Показывая на эту строку:
Код:
If Range("A1").Value = "Группа материала по виду" Then
BloodNick вне форума Ответить с цитированием
Старый 31.08.2010, 14:59   #7
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Конечно. Я же говорил:
Цитата:
Только внеси проверки тот ли лист обрабатывается
тут мало одного Range, надо указывать на каком листе обрабатывать.

Чем программа универсальнее, тем она сложнее
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 31.08.2010, 15:07   #8
The_Prist
Участник клуба
 
Аватар для The_Prist
 
Регистрация: 17.07.2009
Сообщений: 1,088
По умолчанию

Цитата:
Сообщение от Skif-F Посмотреть сообщение
Для The_Prist
Я тоже так думал, а потом блокировку ставить пришлось, потому что на панели инструментов было 5 добавленных мной!!
И все же Вы не правы. Мы об одном и том же говорим? Вы можете через свою надстройку таким же способом(как Вы предлагаете) отследить событие выделения ячеек на активной в данный момент книге?

Попробуйте повесить на это событие что-то типа:
Код:
MsgBox ActiveWorkbook.Name
Будет появляться сообщение при каждом открытии любой книги? Уверен, что нет.
Если да, то у Вас каждый файл открывается в отдельном приложении Excel.

А несколько панелей вполне могло появиться из-за того, что перед закрытием надстройки Вы эту панель не удаляли.
WebMoney - R298726502453; Яндекс.Деньги - 41001332272872
www.excel-vba.ru

Последний раз редактировалось The_Prist; 31.08.2010 в 15:09.
The_Prist вне форума Ответить с цитированием
Старый 31.08.2010, 15:33   #9
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Прошу прощения, это у меня в Word'е было, когда на Document_Open в Normal.dot панели навешал! Там точно при каждом открытии документа отрабатывает Document_Open из Normal.dot
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 06.09.2010, 15:41   #10
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Нашёл!! Здесь!
Цитирую:
В модуле ЭтаКнига главной книги(надстройка либо PERSONAL.XLS) создаете переменную
Код:
Private WithEvents App As Application
На событие открытия главной книги присваиваете ей значение:
Код:
Private Sub Workbook_Open() 
    Set App = Application 
End Sub
и создаете событие(аналогично выбору других событий в книге - в левом окне выбора объектов выбираете App. А в правом появятся все доступные события). Вот для открытия книги:
Код:
Private Sub App_WorkbookOpen(ByVal Wb As Workbook) 
    MsgBox "Вы открыли книгу:" & Wb.Name 
End Sub
Опробовал. Работает!..
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Автозапуск Sk!f Общие вопросы Delphi 1 27.02.2009 12:26
Автозапуск Cobra9100 Microsoft Office Excel 7 13.01.2009 13:54
Автозапуск Satorin Общие вопросы Delphi 14 14.12.2008 16:11
Автозапуск PROGR Общие вопросы Delphi 8 26.12.2007 08:54
Автозапуск zzzzz Общие вопросы Delphi 2 12.11.2007 08:54