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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 27.10.2009, 23:11   #1
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию работа с csv файлами

подскажите пожалуйста

скачиваю файл csv из интернета, открываю методом


Код:
Application.ScreenUpdating = False
                      Filename = "E:\tikers\files\" & Tiker & ".csv"
                        If Dir(Filename) <> "" Then
                            Set wb = Workbooks.Open(Filename)
                            ' читаем данные из файла
                             ....  
                            wb.Close False
                         End If
Application.ScreenUpdating = True

суть вопроса в следующем:
при открытии и работе внутри скачанного файла сначала все дергалось и моргало, добавил
Application.ScreenUpdating = False
Application.ScreenUpdating = True
все стало норм, но при этом в самом документе невозможно ничего сделать..
в скачанном файле текущие курсы нескольких акций, которые сами понимаете меняются постоянно.

можно ли сделать так, чтобы данный файл в ФОНОВОМ режиме обновлялся постоянно, также в ФОНОВОМ режиме эксель брал из него данные и заносил в соответствующую таблицу.
обязательно в ФОНОВОМ режиме, так как с таблицей в это время производится другая работа.

с Уважением
ShamanK вне форума Ответить с цитированием
Старый 28.10.2009, 02:08   #2
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Цитата:
добавил
Application.ScreenUpdating = False
Application.ScreenUpdating = True

все стало норм, но при этом в самом документе невозможно ничего сделать..
Изменение свойства Application.ScreenUpdating никак не влияет на работоспособность кода и его функционал.

Цитата:
можно ли сделать так, чтобы данный файл в ФОНОВОМ режиме обновлялся постоянно
Что подразумевается под обновлением?
Ежесекундная проверка наличия новой версии файла на сайте?
Сделать можно всё, но это сложно.

Цитата:
в ФОНОВОМ режиме эксель брал из него данные и заносил в соответствующую таблицу
Не получится.
Да и ни к чему всё это - макрос при желании можно сделать настолько быстрым, что Вы не успеете заметить, как он заполнит все ваши таблицы...
EducatedFool вне форума Ответить с цитированием
Старый 28.10.2009, 12:25   #3
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

нашел выход,
открываю файл csv как текстовый и построчно забираю значения.
все работает как надо!

спасибо всем кто откликнулся
ShamanK вне форума Ответить с цитированием
Старый 28.10.2009, 12:44   #4
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

А можно Вас попросить выложить весь пример с кодом программы, тоже столкнулась с подобной проблемой, но решить так и не получилось.
Заранее благодарна
KNatalia вне форума Ответить с цитированием
Старый 28.10.2009, 13:11   #5
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

Цитата:
Сообщение от KNatalia Посмотреть сообщение
А можно Вас попросить выложить весь пример с кодом программы, тоже столкнулась с подобной проблемой, но решить так и не получилось.
Заранее благодарна
Наталья, я вообще не программист, у кого то спрошу, где то подстмотрю, в результате компоную то что надо мне.
следовательно за чистоту и "адекватность" кода с точки зрения профессионального программирования НЕ ОТВЕЧАЮ.

предоставляю как есть:

Код:
Declare Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
                                   (ByVal pCaller As Long, ByVal szURL As String, _
                                    ByVal szFileName As String, ByVal dwReserved As Long, _
                                    ByVal lpfnCB As Long) As Long

Function DownLoadFile(FromPathName As String, ToPathName As String) As Boolean
    DownLoadFile = URLDownloadToFile(0, FromPathName, ToPathName, 0, 0) = 0
End Function


Sub Dnonl(site As String)
    Dim ссылка As String, Filename As String
    ссылка = site: Filename = "E:\tikers\online\" & "Data" & ".csv"
    On Error Resume Next: Kill Filename
    DownLoadFile ссылка, Filename
End Sub

Function OnPoluchenieCen()
''************************************************************************
''************************************************************************
    Dim wksh5 As Worksheet, site As String, st As String, dop As String, tf As String, _
    i As Integer, u As Integer, w As Integer, flnm As String, Text As String, Text1 As String
    
    Set wksh5 = Worksheets("Filtr")
    
    st = "http://download.finance.yahoo.com/d/quotes.csv?s="
    dop = "&f=sl1&e=.csv"
    
    If wksh5.Cells(1, "C") = "Вкл" Then
    ' формируем в цикле массив из тикеров
        u = 7
        Do While wksh5.Cells(u, "B") <> ""
            If u > 7 Then tf = tf + "+"
            tf = tf + wksh5.Cells(u, "B"): u = u + 1: DoEvents
        Loop
        site = st & tf & dop ' окончательно формируем ссылку на скачиваемый файл
        flnm = "E:\tikers\online\" & "Data" & ".csv" 'устанавливаем имя скачанного файла и место на диске где его сохранить
    End If
    i = 1 ' счетчик скачиваний файла с ценами
    Do While wksh5.Cells(1, "C") = "Вкл"
             Dnonl (site) ' скачиваем файл
             wksh5.Cells(1, "H") = i ' показываем счетчик
             i = i + 1 ' увеличиваем счетчик на единицу
             Open flnm For Input As #1 ' открываем файл
                For w = 1 To wksh5.Cells(1, "G") ' цикл по тикерам - получаем данные сверяем с тикером и заносим в соотв ячейки
                     Input #1, Text
                     Input #1, Text1
                         If Text = wksh5.Cells(w + 6, "B") Then
                             wksh5.Cells(w + 6, "D") = Text1
                         End If
                     DoEvents
                Next w
             Close #1 ' закрываем файл
    Loop
''************************************************************************
''************************************************************************
End Function
До тех пор пока в ячейке wksh5.Cells(1, "C") стоит ВКЛ
макрос в бесконечном цикле
1 скачивает файл размером в 2 кб,
2 сохраняет его,
3 открывает как текст,
4 считывает необходимые данные,
5 закрывает
6 идет к первому пункту.

как только я нажимаю на кнопку СТОП значение в ячейке wksh5.Cells(1, "C") изменяется на ВЫКЛ, и работа макроса останавливается.

Последний раз редактировалось ShamanK; 28.10.2009 в 13:15.
ShamanK вне форума Ответить с цитированием
Старый 28.10.2009, 13:17   #6
ShamanK
Пользователь
 
Регистрация: 16.10.2009
Сообщений: 90
По умолчанию

кстати вопрос к профессионалам, мне кажется что выражение
Код:
                     Input #1, Text
                     Input #1, Text1
не совсем верное чтобы выбрать из текстового файла
для Text - тикер акции
для Text1 - текущую цену акции.
или это правильно?

Последний раз редактировалось ShamanK; 28.10.2009 в 13:41.
ShamanK вне форума Ответить с цитированием
Старый 28.10.2009, 13:40   #7
KNatalia
Пользователь
 
Регистрация: 14.08.2009
Сообщений: 66
По умолчанию

Спасибо большое!
KNatalia вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Работа с файлами [MI_nor] Общие вопросы C/C++ 4 08.03.2009 17:50
Работа с файлами cr1mson Общие вопросы C/C++ 7 14.01.2009 22:42
Экспорт в csv и импорт из csv cent Microsoft Office Excel 12 28.12.2008 19:50
Работа с файлами DJ Socol Win Api 1 17.07.2007 09:18
Работа с файлами Acros Помощь студентам 5 14.02.2007 18:40