Страницы: 1
RSS
В процессе работы макроса у всех msgBox и InputBox должны автоматически нажиматься "ОК"
 
Собственно, сложил макрос, который по очереди выполняет другие макросы.
Некоторые макросы имеют "Application.InputBox" для ввода значений в процессе вычисления. И все макросы имеют msgBox с выводом потраченного на свою работу времени. Надо сделать так чтобы в InputBox и msgBox всегда нажималась кнопка "ОК" автоматически.
Можно както задать такой параметр ?

Код:

Код
Sub Operativka2()

    Application.ScreenUpdating = True
           
    Windows("Редактор").Activate
    Application.Run "Головна.xls!BXT_im.BXT_im"
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Worksheets(1).Name & ".xlsx"
    ActiveWorkbook.Close (SaveChanges = False)
    
    Windows("Редактор").Activate
    Application.Run "Головна.xls!BXT.BXT"
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Worksheets(1).Name & ".xlsx"
    ActiveWorkbook.Close (SaveChanges = False)
    
    Windows("Редактор").Activate
    Application.Run "Головна.xls!Zvit_2080_import.Zvit_2080_import"
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Worksheets(1).Name & ".xlsx"
    ActiveWorkbook.Close (SaveChanges = False)
    
    Windows("Редактор").Activate
    Application.Run "Головна.xls!Zvit_2080.Zvit_2080"
    ActiveWorkbook.SaveAs ActiveWorkbook.Path & "\" & Worksheets(1).Name & ".xlsx"
    ActiveWorkbook.Close (SaveChanges = False)
 

End Sub
 
Не вижу ни одного InputBox-a и ровно столько же MsgBox-ов. Если хотите просто информировать: выводите в StatusBar. Нажимать автоматом кнопку Ок за пользователя в Inpubox вообще муветон. Это и сделано для того, чтобы пользователь ввел значение и смог проверить и после этого нажать Ок. а уже Ваше дело проверить верные ли данные он ввел.
Если много запросов, то лучше заранее указать пользователю ячейки, в которые вводить значения. И из ячеек кодом забирать забитое там. Или на форме через TextBox-ы.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Как я понимаю - доступ к тем макросам есть. Уберите там все msgbox, вместо ввода в inputbox занесите данные сразу в переменные (откуда их брать - другой вопрос, но судя по всему inputbox не подходит :))
Как вариант - доработать те макросы, чтоб они проверяли публичный флаг. Если флага нет - работаем по-старинке, если есть - по-новому. Ну а флаг ставит Sub Operativka2()
 
А я вообще смутно себе представляю нажатие кнопки в InputBox: в какой момент её нажимать, как программа узнает, что данные введены, и введены правильные (т.е. не потребуется корректировка)?
 
ActiveWorkbook.Close (SaveChanges = False)

Фактически происходит закрытие с сохранением, т.к. SaveChanges - переменная со значением Empty :D
Предполагалось
Код
ActiveWorkbook.Close SaveChanges:=False
 
Файлом с макросами пользуется много людей поочередно. Ктото себе делает один макрос, ктото несколько. Мне надо много. В InputBox-ах во всех отдельных макросах уже введены данные по-умолчанию, там все хорошо. Переделать макросы под себя не могу - есть другие люди, которые не используют умолчания InputBox-ов, а вводят свои значения. Мне же просто надо чтобы все макросы какие они есть запускались поочередно и там в InputBox-ах и msgBox-ах нажимались всегда "ОК".
Изменено: Андрій Козій - 14.05.2013 10:14:10 (ошибся с содержанием)
 
тогда построчно перебирать код каждого макроса и оттуда вылавливать Iputbox-ы подменяя его на значение по умолчанию. ИМХО
Учимся сами и помогаем другим...
 
Цитата
Андрій Козій пишет:
Файлом с макросами пользуется много людей поочередно. Ктото себе делает один макрос, ктото несколько. Мне надо много. В InputBox-ах во всех отдельных макросах уже введены данные по-умолчанию, там все хорошо. Переделать макросы под себя не могу - есть другие люди, которые не используют умолчания InputBox-ов, а вводят свои значения. Мне же просто надо чтобы все макросы какие они есть запускались поочередно и там в InputBox-ах и msgBox-ах нажимались всегда "ОК".
Мой вариант с флагом этому не противоречит (кроме "Переделать макросы под себя не могу").
 
Hugo,  а можете обяснить вариант с флагом? Потому что я в общем то чайник.
 
Вот схематично:
Код
Dim flag As Boolean

Sub startall()
    flag = True
    macro1
    macro2
    flag = False
End Sub

Sub macro1()
    Dim s$
    If flag Then
        [a1] = "test1"
    Else
        s = InputBox("Например test1", "Введите данные", "test1")
        If Len(s) Then [a1] = s
    End If
End Sub

Sub macro2()
    Dim s$
    If flag Then
        [a2] = "test2"
    Else
        s = InputBox("Например test2", "Введите данные", "test2")
        If Len(s) Then [a2] = s
    End If
End Sub
 
Цитата
Андрій Козій пишет:
В InputBox-ах во всех отдельных макросах уже введены данные по-умолчанию, там все хорошо.
Тогда зачем они вообще нужны - InputBox'ы?
 
Юрий М, Для других лентяев вроде меня, но которые вводят свои значения. Просто те, что по-умолчанию - мне подходят, а другим - нет. Так что в отдельных макросах должен быть заложен выбор... А мне надо чтобы все работало автоматом подряд со значениями по-умолчанию.
 
Как вариант сделать проверку на Имя_пользователя (если каждый работает под своим) и при Вашем имени использовать значения а не переменные, и MsgBox-ы отключить. ИМХО :)
Согласие есть продукт при полном непротивлении сторон
 
Sanja, Да, но тогда надо переделать все макросы отдельно, если я правильно понимаю, а уж потом делать один макрос который би запускал остальные.
Я хотел как проще... Просто нажимать ОК )
 
Сейчас попробую варианты Hugo
 
Тем временем мне пришла мысль и я сделал следующее :

В книгу макросов добавил один модуль
в ньом прописал:

Код
Sub Operativka2()
    
   
    Application.ScreenUpdating = True
    
    Module1.Postachalnyk
    Module1.Zakaz
    Module1.Zvit_2080
    Module1.Zvit_2080_import
    Module1.BXT
    Module1.BXT_im
    Module1.Mertvuu_tovar
    Module1.Mertvuu_import
    
    
End Sub


А затем вложил все макросы (Sub Postachalnyk() ......) с такими названиями по-порядку. После "End Sub" идет подчерк (строчка), а затем далее идут Sub ......()
И оно обращается к нужному макросу из етого модуля, под который я себе сделал одну маленькую кнопочку в сторонке ). Конечно я убрал все ненужные InputBox и msgBox со всех макросов нового модуля, прописав значения по-умолчанию ))

Все пользователи остались при своих старых кнопках-макросах и моя лень удовлетворена :)
 
Ну т.е. Вы сделали себе другие макросы. Тоже вариант :)
 
Да, но при етом все старые остались нетронутыми.  :)
Страницы: 1
Наверх