Поиск  Пользователи  Правила 
Закрыть
Логин:
Пароль:
Забыли свой пароль?
Регистрация
Войти
 
Страницы: 1 2 След.
RSS
Автоматическая работа Excel'а, макросы по расписанию
 
Подскажите, есть ли какая-то функция в Эксель или какая-то сторонняя программа, которая позволяет запускать Эксель и его макросы для работы в круглосуточном режиме.
Или нужно создать цикличный макрос? Если да, то каким образом это лучше сделать?
Задача: Каждые 15 минут поступает новая база данных и её нужно форматировать в Екселе.
Если такой вопрос уже был на форуме, то киньте ссылку.
Спасибо.
 
Ссылку не дам (не искал), но направление подскажу: ищем по ключевым словам - запуск макроса по расписанию, запуск макроса в определённое время...
 
или по ключевому выражению: application.OnTime
можно даже прямо в справке VBA набрать  :)
Но это только при запущенном Excel. Если же неоходимо запускать сам Excel, то надо искать "назначение заданий в Windows". Но это уже для другого форума, т.к. это к Excel никакого отношения не имеет.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Спасибо за столь быстрый ответ.
 
Подскажите новичку, какие мне функции(операторы) подойдут. На лист загружаются данные из внешних источников. Задача - автоформатирование получаемых данных. Проблема в том, что мои простенькие макросы не работают АВТОМАТИЧЕСКИ по выполнению условия, а только если вручную хаотично "тыкать" по любым ячейкам (по выполнению условия для макроса ес-но).

Вот примерчик. В ячейке А1 - обновляемое извне время, в ячейке В1 - данные, загружаемые извне. Ячейка С1 должна заполниться без моего участия.

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("C1") = "" Then
    If [A2] >= [A3] Then [C1].Value = [B1].Value
            End If
            End Sub


Я новичок и не знаю, с чего начать, куда смотреть. Я вижу решение двумя путями
-периодически заставлять запускаться макросы раз в опр. время.
-заставить всё-же их запуститься по выполнению условия. Может, если ввести ещё дополнительную ячейку, которая бы меняла значение 0("") на 1 при выпонении условия? Просто попалось много вопросов типа "запуск макроса при изменении ячейки", но не успел ещё в них разобраться.
Заранее спасибо за помощь.
 
Поищите по форуму по DDE
А условие - обрабатывайте пересчёт, завязав на диапазон формулы, или события текстбокса - завязав текстбокс, или поищите/освойте/используйте setlinkondata
Изменено: Hugo - 22 Ноя 2013 11:38:02
 
Меня бы наверное устроило что-то простое типа:

Код
Sub Zapusk()
            Application.OnTime TimeValue("18:00:00"), "Proce"
        End Sub

Но у меня все автоматические операции в  текстбоксе, типа той-же:

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("C1") = "" Then
    If [A2] >= [A3] Then [C1].Value = [B1].Value
      End If
      End Sub

И я не знаю как это вместе связать, и что означает вообще термин текстбокс. Просьба помочь связать эти два кода и подсказать, что забивать в поиске по этому вопросу - "тексбокс excel" - ничего не выдаёт. Сорри за дикий оффтоп.
 
Недавно была тема, где я показывал пример использования ТекстБокса на листе. Там требовалось при наступлении события изменения увеличивать на единичку значения в ячейке.
 
Юрий М, не нашёл(не определил)..
 
Здесь
 
Спасибо, но всё равно тяжело понять как-же связать эти два примера
 
Код
 Private Sub TextBox1_Change()
    If Me.TextBox1 = "Text" Then [B6] = [B6] + 1
End Sub
и

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("C1") = "" Then
    If [A2] >= [A3] Then [C1].Value = [B1].Value
   End If
   End Sub

и изменится ли всё-таки тогда С1 при А2>A3 без моего участия, ведь А1 и В1 заполняются "извне", от них "пляшут" все остальные?
никак не получается
 
А при чём тут SelectionChange? Вы понимаете, что это за событие?
 
не понимаю. а где искать и что делать тоже. что такое текстбокс я тоже не знаю, я могу только менять переменные в

Код
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("C1") = "" Then
    If [A2] >= [A3] Then [C1].Value = [B1].Value
   End If
   End Sub
а задачу я описал. даже не знаю, с чего начать, задачу решить надо, а знаний 0
 
Завязываете как в примере текстбокс на изменяющуюся ячейку, в событии текстбокса пишите свою логику обработки.
Пример есть - но там задача была другая, поэтому там и  
If Me.TextBox1 = "Text" Then [B6] = [B6] + 1
 
Hugo, спасибо. но я не понимаю элементарных для вас формул, и поэтому, свой пример составить тоже не смогу. Что такое Me.TextBox1, как это всё связать - я не знаю.
 
Вам это не нужно.
Ищите в режиме дизайнера текстбокс, в свойствах привязываете его к своей ячейке, затем в его событии пишите свой код. Значение текстбокса можете и не анализировать. А можете и анализировать.
 
Цитата
в режиме дизайнера текстбокс, в свойствах привязываете его к своей ячейке, затем
для меня и это магия. Будьте добры, подскажите алгоритм к этой части текста.
 
Введите в ячейку А1 любое значение.
 
Юрий М, спасибо!
Код
Private Sub TextBox1_Change()
     If Range("A2") = 0 Then
           If [A3] > 0 Then [A2].Value = [A3].Value
           End If
End Sub
Я правильно понял, что при изменении ячейки А1 "это моё условие" выполняется/не выполняется по условию? Нет возможности испытать, так как ячейка А1 уже занята "внешними" данными.  Нет ли возможности заменить А1 на другую?
 
Так ведь Вам и нужно отслеживать поступление внешних данных. Как они изменятся - сработает макрос.
 
Да вот только не из А1, в этой ячейке нет полезной инфы.
Изменено: proshin - 23 Ноя 2013 02:57:48
 
Тогда включите режим конструктора и поменяйте привязку ТекстБокса на другую (нужную Вам) ячейку.
 
Помогите же пожалуйста. Мучаюсь, но ничего не получается.
Ну как поменять привязку ТекстБокса на другую ячейку? И решит ли это  мою задачу?

Я попробовал другим путём, но тоже неудача:
1.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Test As Range
    Set Test = Range("A3")
    Static Oldvalue As Variant
    If Test > Oldvalue Then
     Call first
     Oldvalue = Test
    End If
End Sub
2.

Код
 Sub first
     If Range("A2") = 0 Then
        If [A3] > 0 Then [A2].Value = [A3].Value
        End If
End Sub

Эта связка работает без моего участия, меня всё устраивает, макрос срабатывает единожды когда от него требуется.
Но вот все попытки дополнить эту связку провалились. Например, то-же самое в столбце В. Если тупо скопировать первый код "вниз" на Worksheet'е, заменив ячейку и макрос, то ругается: "Compile error: Ambiguous name detected: Worksheet_Change". Внятной инфы или примера, как это побороть пока не нашёл, попытки объединить эти два условия в один Sub тоже провалились.
Изменено: proshin - 24 Ноя 2013 06:35:46 (дополнение)
 
Узнал про:

  • Exit Sub – чтобы прервать выполнение кода раньше времени;
  • Select Case (условие, тот же Column, например) – чтобы определить перечень условий;
  • If – Then – ElseIf – ElseIf… - End If – то же, что и предыдущий.
Ещё возьмите на вооружение совет: если Вы при изменении выполняете изменение, то чтобы не зациклить код, например, при пересечении условий, обрамляйте код отключением и включением Application.EnableEvents = False/True.

Но как ими пользоваться ещё не усвоил. Прошу помочь. Задача:
1.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Test As Range
    Set Test = Range("A3")
    Static Oldvalue As Variant
    If Test > Oldvalue Then
     Call first
     Oldvalue = Test
    End If
End Sub
2.
Код
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Test As Range
    Set Test = Range("B3")
    Static Oldvalue As Variant
    If Test > Oldvalue Then
     Call Second
     Oldvalue = Test
    End If
End Sub

А может каким-то другим способом?
 
Так и не вышло связать эти два условия, ни Next, ни ElseIf не помогают, Может, кто-нибудь подскажет, как правильно?
 
Да что Вы привязались к событию Worksheet_Change? Не сработает оно... Вам же предложили вариант - осталось только привязать ТекстБокс к другой ячейке. Не знаете, как включить режим конструктора? - наберите во встроенной справке:  Режим конструктора.
 
Юрий М, я понял, что надо "нажать на кнопочку"  Режим конструктора. Но тексбокса я там не нашёл, только в юзерформе, но как и что я не понял. Пожалуйста, напишите - нажал туда, далее сюда..
 
Цитата
Но тексбокса я там не нашёл
Где "там"? Как только Вы нажмёте на кнопку "Режим конструктора", то на листе сразу станет видимым ТекстБокс. Он в районе ячейки С3.  Неужели Вы его не видите?
 
Цитата
Пожалуйста, напишите - нажал туда, далее сюда..
Off - взгляд со стороны ;)
Может вам в другом месте поискать индивидульного наставника-репититора?
Или самому книжку почитать?
Поиск по нету включить?
Или, в крайнем случае и при согласии помогающего, перейти в ЛИЧНУЮ переписку?
"Ctrl+S" - достойное завершение ваших гениальных мыслей!.. ;)
 
Извините, но не "появляется". Может, из-за того, что версию на 2013 сменил? На Вашем примере "Вместо счётчика" появляется, но в свойствах я не нашёл, как изменить А1 на другую ячейку.
Изменено: proshin - 24 Ноя 2013 16:56:12
Страницы: 1 2 След.
Читают тему (гостей: 1)
Наверх