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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.02.2009, 21:34   #11
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Const ИмяФайла = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ.txt"
Dim РазмерФайла As Long
Const ВременнойИнтервалМеждуПроверками = 2 ' в секундах

Скажите А перед const необходимо поставить Public или Private?
zander вне форума Ответить с цитированием
Старый 13.02.2009, 21:41   #12
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Если макросы, использующие эти константы и переменную, будут находиться в другом модуле, то используйте такой вариант:
Код:
Public Const ИмяФайла = "C:\Текстовый документ.txt"
Public РазмерФайла As Long
Public Const ВременнойИнтервалМеждуПроверками = 2
Если же весь код будет расположен в одном модуле - то можно оставить всё как есть.
EducatedFool вне форума Ответить с цитированием
Старый 13.02.2009, 23:02   #13
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию Респект!

Отлично, работает как надо... (немного переделал что бы на лист выводилось общего файла Excel) Но вот как теперь получить возможность выскочить из бесконечного цикла мониторинга, что бы исполнить макрос обработки когда обнаружится новая строка? А потом по кнопке (ну или событию) опять запустить мониторинг?
zander вне форума Ответить с цитированием
Старый 13.02.2009, 23:23   #14
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Выйти из цикла, и запустить его вновь - не проблема.

А по какому событию это будет происходить - решать уже Вам (это может быть что угодно: по истечении 12 часов работы, после 350 проверок, при нажатии кнопки на листе или на панели инструментов, при выполнении какого-либо условия, при наличии в файле более 1000 строк, и т.д. и т.п.)

Как скажете - так и сделаем.

Но зачем что-то изобретать?
Есть же макрос ОбработкаФайла, который как раз запускается при обнаружении в текстовом файле новых строк.
В этот макрос и допишите обработку.
Или просто вызывайте нужный макрос обработки строк из макроса ОбработкаФайла

Выходить из бесконечного цикла для этого вовсе необязательно...
EducatedFool вне форума Ответить с цитированием
Старый 13.02.2009, 23:47   #15
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Вот запускаем мы (напрмер кнопкой) макрос СлежениеЗаФайлом, появилась новая строчка, отработал макрос Обработкафайла и параллельно с ним мой собственный макрос, который реагирует на изменении в текстовом файле. Но пока не появится результат отработки от моего собственного макроса, обрабатывать текстовый не надо, иначе мой собственный макрос (при появлении очередной новой строчки) начнет дергать удаленный софт до получения результата от предыдущей обработки. Поэтому хотелось бы иметь возможность останавливать мониторинг (ну и возобновлять) как кнопкой так и без нее.
zander вне форума Ответить с цитированием
Старый 13.02.2009, 23:54   #16
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

В этом случае можно сделать так:
Код:
Public Const ИмяФайла = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ.txt"
Public РазмерФайла As Long, ПоискИзмененийВременноОтключён As Boolean
Public Const ВременнойИнтервалМеждуПроверками = 2

Sub СлежениеЗаФайлом()
    Do While True    ' бесконечный цикл
        If Not ПоискИзмененийВременноОтключён Then
            НовыйРазмерФайла = CreateObject("scripting.filesystemobject").GetFile(ИмяФайла).Size
            If НовыйРазмерФайла > РазмерФайла Then ОбработкаФайла: РазмерФайла = НовыйРазмерФайла
        End If
        t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend ' пауза
    Loop
End Sub

Sub ОбработкаФайла()
    Application.ScreenUpdating = False
    Workbooks.OpenText Filename:=ИмяФайла, DataType:=xlDelimited, Comma:=True
    ActiveWorkbook.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).[a1]
    ActiveWorkbook.Close False
    Application.ScreenUpdating = True

    ПоискИзмененийВременноОтключён = True
    ' здесь запускается Ваш макрос
    ' пока он работает, изменения в текстовом файле не отслеживаются
    ПоискИзмененийВременноОтключён = False
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 14.02.2009, 00:07   #17
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

А кнопочкой как можно прекратить исполнение?
zander вне форума Ответить с цитированием
Старый 14.02.2009, 00:12   #18
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Создайте 2 кнопки, и повесьте на них два последних макроса:

Код:
Public Const ИмяФайла = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ.txt"
Public РазмерФайла As Long, ПоискИзмененийВременноОтключён As Boolean
Public Const ВременнойИнтервалМеждуПроверками = 2
Public БесконечныйЦиклАктивирован As Boolean

Sub СлежениеЗаФайлом()
    БесконечныйЦиклАктивирован = True
    Do While БесконечныйЦиклАктивирован    ' бесконечный цикл
        If Not ПоискИзмененийВременноОтключён Then
            НовыйРазмерФайла = CreateObject("scripting.filesystemobject").GetFile(ИмяФайла).Size
            If НовыйРазмерФайла > РазмерФайла Then ОбработкаФайла: РазмерФайла = НовыйРазмерФайла
        End If
        t = Timer: While t + ВременнойИнтервалМеждуПроверками > Timer: DoEvents: Wend    ' пауза
    Loop
End Sub

Sub ОбработкаФайла()
    Application.ScreenUpdating = False
    Workbooks.OpenText Filename:=ИмяФайла, DataType:=xlDelimited, Comma:=True
    ActiveWorkbook.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).[a1]
    ActiveWorkbook.Close False
    Application.ScreenUpdating = True

    ПоискИзмененийВременноОтключён = True
    ' здесь запускается Ваш макрос
    ' пока он работает, изменения в текстовом файле не отслеживаются
    ПоискИзмененийВременноОтключён = False
End Sub


Sub ЗапускЦикла()
    If Not БесконечныйЦиклАктивирован Then СлежениеЗаФайлом
End Sub

Sub ОстановЦикла()
    БесконечныйЦиклАктивирован = False
End Sub
EducatedFool вне форума Ответить с цитированием
Старый 14.02.2009, 00:50   #19
zander
Форумчанин
 
Регистрация: 24.01.2009
Сообщений: 113
По умолчанию

Не хочет останавливаться Останавливает исполнение только кнопка Reset в окне Visual Basic
zander вне форума Ответить с цитированием
Старый 14.02.2009, 01:07   #20
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
Не хочет останавливаться
Согласен, ошибочка вышла...

Так точно работает:
Код:
Public Const ИмяФайла = "C:\Documents and Settings\Игорь\Рабочий стол\Текстовый документ.txt"
Public РазмерФайла As Long, ПоискИзмененийВременноОтключён As Boolean
Public Const ВременнойИнтервалМеждуПроверками = 1
Public БесконечныйЦиклАктивирован As Boolean

Sub СлежениеЗаФайлом()
    'Debug.Print БесконечныйЦиклАктивирован
    If Not БесконечныйЦиклАктивирован Then Exit Sub
    If Not ПоискИзмененийВременноОтключён Then
        НовыйРазмерФайла = CreateObject("scripting.filesystemobject").GetFile(ИмяФайла).Size
        If НовыйРазмерФайла > РазмерФайла Then ОбработкаФайла: РазмерФайла = НовыйРазмерФайла
    End If
    If БесконечныйЦиклАктивирован Then Application.OnTime  _
            Now + TimeSerial(0, 0, ВременнойИнтервалМеждуПроверками), "СлежениеЗаФайлом"
End Sub

Sub ОбработкаФайла()
    Application.ScreenUpdating = False
    Workbooks.OpenText Filename:=ИмяФайла, DataType:=xlDelimited, Comma:=True
    ActiveWorkbook.Worksheets(1).Cells.Copy ThisWorkbook.Worksheets(1).[a1]
    ActiveWorkbook.Close False
    Application.ScreenUpdating = True

    ПоискИзмененийВременноОтключён = True
    ' здесь запускается Ваш макрос
    ' пока он работает, изменения в текстовом файле не отслеживаются
    ПоискИзмененийВременноОтключён = False
End Sub

Sub ЗапускЦикла()
    БесконечныйЦиклАктивирован = True
    СлежениеЗаФайлом
End Sub

Sub ОстановЦикла()
    БесконечныйЦиклАктивирован = False
End Sub
EducatedFool вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ввод из текстового файла bygoga Паскаль, Turbo Pascal, PascalABC.NET 14 23.11.2008 13:37
Задача на анализ текстового файла Latedelivery Паскаль, Turbo Pascal, PascalABC.NET 4 31.10.2008 10:55
Открытие текстового файла Victor Microsoft Office Excel 2 16.01.2008 03:42