Страницы: 1
RSS
Вытащить данные из закрытой книги и обновить формулы с интервалом
 
Доброго дня. Прочитал очень много, но решения общего не нашел. А так как с VBA я как бабушка с планшетом прошу о помощи. Задача следующая. У меня есть книга "Выгрузка на монитор" где путем формул и вычислений данные обрабатываются переводятся к удобоваримому виду которые далее транслируются на экран к пользователям. Данные для "выгрузки на монитор" мне приходится брать из файла import который выгружается с 1С каждые 10 минут. Далее обновлять все формулы. Я нашел макрос который считывает данные из закрытой книги и помещает в "Выгрузка на монитор", так же нашел макрос которые с периодом 10 минут обновляет формулы. Но это происходит 1 раз а мне нужно что бы это делалось с промежутками 10 минут. Т.е. при запуске макроса он бы доставал данные из файла import помещал все в "Выгрузка на монитор" далее обновлял все формулы и так каждые 10 минут. Заранее благодарен за помощь!!!
 
Смотрите в сторону Application.OnTime
 
Так я же говорил что с VBA как обезьяна с гранатой. у меня есть код вытаскивания данных с закрытой книги.

Код
Sub Get_Value_From_Close_Book2()
    Dim sShName As String, sAddress As String, vData
    Dim objCloseBook As Object
    'Отключаем обновление экрана
    Application.ScreenUpdating = False
    Set objCloseBook = GetObject("C:\Documents and Settings\Книга1.xls")
    sAddress = "A1:C100" 'или одна ячейка - "A1"
    'получаем значение
    vData = objCloseBook.Sheets("Лист1").Range(sAddress).Value
    objCloseBook.Close False
    'Записываем данные на активный лист книги,
    'с которой запустили макрос
    If IsArray(vData) Then
        [A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
    Else
        [A1] = vData
    End If
    'Включаем обновление экрана
    Application.ScreenUpdating = True
End Sub
А как сделать так что бы он запускался с периодичностью 10 минут. Куда вставить

Код
Application.OnTime Now + TimeValue("00:10:00"), "Get_Value_From_Close_Book2"
я понятия не имею ((((. т.е. какой код должен получится в этоге. У меня почему то уже и Get_Value_From_Close_Book2 не работает.
И еще заодно. Я вчера ковырялся с файлом а сегодня макрос из книги исчез их что нельзя сохранять и если можно то как. Еще раз спасибо.
Изменено: Pal2006 - 15.01.2016 11:13:29 (Не внимательность)
 
Коды надо оформлять тегом <...>. Эту кнопочку можно найти среди остальных над тем полем, куда текст сообщения вписываете. Исправьте свое сообщение.
Запускаете один раз код:
Код
Sub Get_Value_From_Close_Book2() 
Dim sShName As String, sAddress As String, vData 
Dim objCloseBook As Object 
'Отключаем обновление экрана 
Application.ScreenUpdating = False 
Set objCloseBook = GetObject("C:\Documents and Settings\Книга1.xls") 
sAddress = "A1:C100" 'или одна ячейка - "A1" 
'получаем значение 
vData = objCloseBook.Sheets("Лист1").Range(sAddress).Value 
objCloseBook.Close False 
'Записываем данные на активный лист книги, 
'с которой запустили макрос 
If IsArray(vData) Then 
[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData 
Else 
[A1] = vData 
End If 
'Включаем обновление экрана 
Application.ScreenUpdating = True
Application.OnTime Now + TimeValue("00:10:00"), "Get_Value_From_Close_Book2"
End Sub
далее он сам будет запускаться каждые 10 минут. Следующим вопросом будет явно "как остановить этот бесконченый 10-минутный цикл?". Но советую поискать по форуму - ответы уже были.
чтобы макросы не пропадали надо сохранять их не в "Книга Excel(.xlsx)", а в .xls, .xlsm, .xlsb.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо большое. Как остановить макрос я уже прочитал. Но вопрос появился следующий. Я внес данный макрос но при добавлении нового листа он мне подтягивает данные и на новый лист тоже. Я удалил его и вставил только на нужный мне лист (лист3) Но теперь у меня выскакивает сообщение следующего содержания:
"Не удается выполнить макрос "Выгрузка на монитор.xlsm! Get_........book2". Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены. До этого все работало (((((. Может я что то не так сделал?

т.е. даже наверно не так. При запуске макроса он подтягивает данные, но через 10 минут выскакивает следующее сообщение.
 
Цитата
Коды надо оформлять тегом <...>.... Исправьте свое сообщение.
 
Теги подставил. Мне кажется я понял в чем проблема. Данный макрос подставляет данные на активный лист книги. Т.е. при открытии листа 4 он и стал активным. Но теперь он все равно не работает.  Что можно сделать что бы данные прогружались именно на лист3? Возможно ли как то исправить данный код?
 
Цитата
Теги подставил.
Вы вручную добавили знаки. Тэги ставятся с помощью кнопки <...>
Выделить строки кода и нажать кнопку

Сравните вид кода в сообщениях №3 и №4
 
Цитата
Pal2006 написал: Теги подставил
:) А надо не подставить, а ими оформить код:
Цитата
The_Prist написал: Эту кнопочку можно найти среди остальных над тем полем, куда текст сообщения вписываете.
хоть усилия прилагайте, что ли, чтобы вдуматься в фразы :)

По проблеме: надо явно указать в какую книгу и какой лист вставлять. Т.к. про книгу ничего не знаем - про лист:
Код
Sheets(3).[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
Подробнее про обращение к диапазонам я писал на том же сайте, с которого обсуждаемый код: Как обратиться к диапазону из VBA
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Если я правильно понял то мне нужно
Код
[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
заменить на
Код
Лист3.[A1].Resize(UBound(vData, 1), UBound(vData, 2)).Value = vData
Данные подгружаются именно на третий лист. Спасибо большое The Prist и остальным. НО по прохождению цикла 10 минут все так же вылетает сообщение"Не удается выполнить макрос "Выгрузка на монитор.xlsm!Get_........book2". Возможно, этот макрос отсутствует в текущей книге либо все макросы отключены. Почему так? Первый же раз макрос сработал правильно Я так понимаю проблема при вызове.
Код
Application.OnTime Now + TimeValue("00:01:00"), "Get_Value_From_Close_Book2"
Что не так?
 
Помогите пожалуйста. Что я не так делаю?
 
Вроде сам разобрался спасибо всем участвовавшим!!!
Страницы: 1
Читают тему
Наверх