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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2010, 10:09   #1
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию макрос мониторинга файла не хочет работать долго

приведенный ниже макрос работает корректно, но не долго. Если в течение нескольких часов размеры файлов Alex и/или Alex1 не меня.тся, то макрос перестает отрабатывать изменения котрые спустя несколько часов всетаки меняются по размеру. В чем может быть причина?

Const ИмяФайла1 = "C:\input\Alex.csv"
Const ИмяФайла2 = "C:\input\Alex1.csv"

Public РазмерФайла1 As Long, РазмерФайла2 As Long, ПоискИзмененийВременноОтключён As Boolean
Const ВременнойИнтервалМеждуПроверками = 2

Public Sub СлежениеЗаФайлом()
On Error Resume Next


If ПоискИзмененийВременноОтключён = True Then Exit Sub


Do While True ' бесконечный цикл
ПоискИзмененийВременноОтключён = False


НовыйРазмерФайла1 = CreateObject("scripting.filesystemo bject").GetFile(ИмяФайла1).Size
If НовыйРазмерФайла1 > РазмерФайла1 Then DoFile1 (ИмяФайла1): РазмерФайла1 = НовыйРазмерФайла1

НовыйРазмерФайла2 = CreateObject("scripting.filesystemo bject").GetFile(ИмяФайла2).Size
If НовыйРазмерФайла2 > РазмерФайла2 Then DoFile2 (ИмяФайла2): РазмерФайла2 = НовыйРазмерФайла2



t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend ' пауза


Loop

End Sub

Public Sub DoFile1(ByVal ИмяФайла1 As String)

If Worksheets("Robot").Range("F21").Va lue > 0 And Worksheets("Robot").Range("D21").Va lue = "ON" Then Call robottt
End Sub

Public Sub DoFile2(ByVal ИмяФайла2 As String) ' включаем перехват

If Worksheets("Robot").Range("D21").Va lue = "ON" Then Call Sheets("Robot").s2
End Sub
zander вне форума Ответить с цитированием
Старый 01.12.2010, 11:52   #2
Skif-F
Форумчанин
 
Регистрация: 24.03.2010
Сообщений: 349
По умолчанию

Убери команду On Error Resume Next и посмотри какие ошибки будут вылетать
Нет нерешаемых задач - есть недостаток времени и данных!
Skif-F вне форума Ответить с цитированием
Старый 01.12.2010, 12:51   #3
Владимир.
Пользователь
 
Регистрация: 13.08.2009
Сообщений: 10
По умолчанию

Процессор занят на 100%
http://www.vbnet.ru/forum/show.aspx?id=30025
Владимир. вне форума Ответить с цитированием
Старый 01.12.2010, 14:47   #4
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

В целом нет, процессор занят примерно на 50% лишь временами загрузка прыгает до 100% и потом опять опускается до 50
zander вне форума Ответить с цитированием
Старый 01.12.2010, 15:09   #5
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Попробуйте такой вариант.Через таймер запускаете PROVERKA
и никакаких циклов
Код:
Const ИмяФайла1  As String = "C:\input\Alex.csv"
Const ИмяФайла2  As String = "C:\input\Alex1.csv"

 Sub PROVERKA()

Static Raz_File1 As Double
Static Raz_File2 As Double
If R_file(ИмяФайла1) > Raz_File1 Then
  Raz_File1 = R_file(ИмяФайла1)
  'Макрос1
End If
If R_file(ИмяФайла2) > Raz_File2 Then
Raz_File2 = R_file(ИмяФайла2)
 'Макрос2
End If


End Sub
Function R_file(F_name As String) As Double
On Error Resume Next
R_file = FileLen(F_name)
If Err.Number = 0 Then Exit Function
R_file = 0
End Function
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 01.12.2010, 18:58   #6
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

спасибо, но вот что то прикрутил я его к макросу, а он не работает... что то не так с таймером?
Const ИмяФайла1 As String = "C:\input\Alex.csv"
Const ИмяФайла2 As String = "C:\input\Alex1.csv"

Sub PROVERKA()

Static Raz_File1 As Double
Static Raz_File2 As Double
If R_file(ИмяФайла1) > Raz_File1 Then
Raz_File1 = R_file(ИмяФайла1)
'Макрос1
Worksheets("Лист1").Range("A1").Val ue = "ON"

End If
If R_file(ИмяФайла2) > Raz_File2 Then
Raz_File2 = R_file(ИмяФайла2)
'Макрос2
Worksheets("Лист1").Range("A2").Val ue = "ON"
End If


End Sub
Function R_file(F_name As String) As Double
On Error Resume Next
R_file = FileLen(F_name)
If Err.Number = 0 Then Exit Function
R_file = 0
End Function

Public Sub StartMonitoring()
Application.OnTime Now + TimeValue("00:00:02"), Worksheets("Лист1").PROVERKA
End Sub

Public Sub Monitoring()
StartMonitoring

End Sub
zander вне форума Ответить с цитированием
Старый 01.12.2010, 19:03   #7
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Все верно,код не правильный у таймера,он 1 раз только при старте сработает.
Сейчас напишу правильный
Код:
Sub Start()
Application.OnTime Now + TimeValue("00:00:02"), "Start"

Worksheets("Лист1").PROVERKA

DoEvents
End Sub
Анализ,обработка данных Недорого

Последний раз редактировалось doober; 01.12.2010 в 19:09.
doober вне форума Ответить с цитированием
Старый 01.12.2010, 19:27   #8
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

ага, ага... пока работает, сегодня на ночь оставим. А как то можно индикатор работы макроса (любой) прикрутить и как можно остановить работу с помощью кнопки?
zander вне форума Ответить с цитированием
Старый 01.12.2010, 19:49   #9
doober
Старожил
 
Аватар для doober
 
Регистрация: 02.05.2009
Сообщений: 3,907
По умолчанию

Ячейка А1 будет определять останов

Код:
Sub Start()
DoEvents

If Sheets("Лист1").Range("A1") = False Then Exit Sub

Application.OnTime Now + TimeValue("00:00:02"), "Start"

Application.StatusBar = Now 'Или в процедуру макроаса вставляете эту строку,и выводите что хотите,хоть размер файла
Worksheets("Лист1").PROVERKA
End Sub
Анализ,обработка данных Недорого
doober вне форума Ответить с цитированием
Старый 02.12.2010, 11:34   #10
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Ночь макрос отработал без сбоев! Спасибо!
Скажите, этот макрос ограничен количеством файлов за которыми он может следить или если размножить соответствующую часть макроса можно мониторить 10 - 15 файлов?
zander вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Не хочет работать iif alco84 Microsoft Office Access 6 18.03.2010 09:48
Не хочет работать _alpha во Flash 666ALUKARD666 Помощь студентам 0 24.02.2010 12:02
Почему Программа не хочет работать strateg0793 Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 8 21.01.2010 14:10
ну не хочет работать!!! MySQL artush1984 Общие вопросы C/C++ 1 06.09.2009 13:41
Не хочет работать OpenPictureDialog guffer Общие вопросы Delphi 4 08.07.2009 20:14