Выбрать дату в календареВыбрать дату в календаре

Страницы: 1 2 След.
Изменение условия макроса если он простаивает
 
Ну чего вы смеетесь ? :-)
Ну терминологией я не владею, но он же действительно останавливается... ))

Идет циклическая последовательность выполнения макросов в зависимости от условия. Макросы запускаются по очереди.
Но вот наступает момент, когда условие перестает сменяться (не приходит ответа на ссылку DDE). Если такой простой длится дольше определенного времени, то нужно либо внести коррективы в макрос, либо запустить другой в котором они уже есть.
А вот как это сделать?
Изменение условия макроса если он простаивает
 
Здравствуйте уважаемые!
Подскажите, как можно изменить условие в макросе, если он остановился и простоял на одном месте, допустим 15 секунд?
Добавление новых данных в старые файлы макросом.
 
Прикрепляю пример файла с данными.
Добавление новых данных в старые файлы макросом.
 
Цитата
Sanja написал:
Т.е. Вам нужно при каждом новом запросе проверять 2260 уже имеющихся файлов?

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

Цитата
Sanja написал:
И покажите хоть один из этих файлов

Сейчас не могу прислать файл целиком, но вот его часть:

DATE/TIME: 20130627  23:59:59 to 20170627  23:59:59 OPEN HIGH LOW CLOSE VOLUME COUNT WAP HAS GAPS
20130701  16:00:00 8.79 9.08 8.58 8.71 5703 2830 8.8435 ЛОЖЬ
20130702  16:00:00 8.68 8.73 8.35 8.56 2899 1837 8.524 ЛОЖЬ
20130703  13:00:00 8.49 8.74 8.45 8.55 2708 1065 8.611 ЛОЖЬ
20130705  16:00:00 8.64 8.74 8.35 8.41 2565 1554 8.4865 ЛОЖЬ
20130708  16:00:00 8.4 8.86 8.35 8.84 3419 2147 8.654 ЛОЖЬ
20130709  16:00:00 8.84 8.88 8.6 8.72 2296 1406 8.7285 ЛОЖЬ

Верхняя строка это заголовок. Далее идут строки с данными. Вначале каждой строки дата.
Все файлы одинаковые по структуре, различаются только данные содержащиеся в строках.
Добавление новых данных в старые файлы макросом.
 
Сам программировать не умею. По смыслу ещё могу что-то простое составить, а вот решить такую задачу мне не по силам...
Помогите пожалуйста.
Добавление новых данных в старые файлы макросом.
 
Цитата
Sanja написал:
О каких документах речь?
Цитата
krest написал:
Имеем файл с макросами, который получает данные посылая DDE ссылку столько раз сколко строк в столбце A и сохраняет каждый полученный результат в отдельный файл.

Вот в эти файлы, которые были получены с помощью макросов, содержащихся в прикрепленном в предыдущем сообщении файле.
Там же в предыдущем посте и пример информации которая в них содержится, к которой нужно добавлять новую.
Добавление новых данных в старые файлы макросом.
 
Приветствую всех  наилучшими пожеланиями!

Имеем файл с макросами, который получает данные посылая DDE ссылку столько раз сколко строк в столбце A и сохраняет каждый полученный результат в отдельный файл. (Прикрепляю)
Данные представляют собой историю цен на акции. Выглядят так:

DATE/TIME: 20130627  23:59:59 to 20170627  23:59:59 OPEN HIGH LOW CLOSE VOLUME COUNT WAP HAS GAPS
20130701  16:00:00 8.79 9.08 8.58 8.71 5703 2830 8.8435 ЛОЖЬ
20130702  16:00:00 8.68 8.73 8.35 8.56 2899 1837 8.524 ЛОЖЬ
20130703  13:00:00 8.49 8.74 8.45 8.55 2708 1065 8.611 ЛОЖЬ
20130705  16:00:00 8.64 8.74 8.35 8.41 2565 1554 8.4865 ЛОЖЬ
20130708  16:00:00 8.4 8.86 8.35 8.84 3419 2147 8.654 ЛОЖЬ
20130709  16:00:00 8.84 8.88 8.6 8.72 2296 1406 8.7285 ЛОЖЬ

Помогите пожалуйста уважаемые, сделать так чтобы при новом запросе данных недостающие данные добавлялись в уже имеющиеся докумены. Например последние данные содержащиеся в документе девятое июля 2013 года ( 20130709 ). Новые полученные данные начинаются с пятого июля 2013 года и заканчиваются одиннадцатым июля 2013 года. Значит нужно добавить только две строки из новых поступивших данных за десятое и одиннадцатое число.
Получение и сохранение данных полученных по DDE
 
Цитата
vikttur написал:
Может, назвать тему всеохватывающе - "Excel"?

Отличная идея!  :)
Получение и сохранение данных полученных по DDE
 
Понял Вашу логику. В этот раз специально выбрал название темы более емкое чем раньше, чтобы можно было закончить начатое в одной теме. Жаль что это противоречит философии форума. Неудобно как-то... Постараюсь соблюдать правила ))
Получение и сохранение данных полученных по DDE
 
Направленность у вопросов как раз одна...
А как же можно решить задачу если она подразумевает разбиение на составляющие?
Неужели для каждого вопроса заводить новую тему? Тогда ведь потеряется связь собственно с решением основной задачи! Да и люди заинтересованные в ней не смогут проследить и поучаствовать в ее развитии.
Получение и сохранение данных полученных по DDE
 
Цитата
JayBhagavan написал:
2.6. Один вопрос - одна тема. Не следует в открываемой теме обозначать и задавать сразу несколько вопросов.

Прошу прощения, уважаемый JayBhagavan, но я ведь озвучил тему- "Получение и сохранение данных полученных по DDE"
И мой вопрос:
Цитата

krest написал:
Если можно вопрос?
По условию поставщика данных, в течении десяти минут можно запрашивать не более 60 раз.
Т.е. в среднем шесть циклов запроса за минуту.
По моим наблюдениям получается около 15 в минуту.
Как прописать в коде чтобы более шестидесяти запросов за десять минут не отправлялось?
Или лучше какую-то паузу в код внести?

полностью ей соответствует. В нем идет речь именно о соблюдении правил получения данных. Разве не так?
Получение и сохранение данных полученных по DDE
 
Если можно вопрос?
По условию поставщика данных, в течении десяти минут можно запрашивать не более 60 раз. Т.е. в среднем шесть циклов запроса за минуту. По моим наблюдениям получается около 15 в минуту.
Как прописать в коде чтобы более шестидесяти запросов за десять минут не отправлялось? Или лучше какую-то паузу в код внести?
Получение и сохранение данных полученных по DDE
 
Раньше никогда не сталкивался с созданием макросов в Эксель, да и вообще в программировании не разбираюсь.
Если все подписано, то могу составлять по смыслу, иногда получается... ))
Поэтому Ваши любезные подсказки проверить не могу, т.к. практически не понимаю что эти функции делают и как их использовать, а следовательно и сложно представить в какое именно место в коде они должны быть вставлены...
Но за внимание благодарен!
Получение и сохранение данных полученных по DDE
 
Дело в том, что макросы должны запускаться поочередно.
Сперва запрашиваются данные (макрос "formula"), когда они подготовлены и в ячейке со ссылкой появилось слово RECEIVED, тогда (и не раньше!) должен  запускаться макрос "fetchHistoricalData" вместе с которым работает и "populate". Когда и он закончит работу в ячейке со ссылкой слово поменяется на "FINISHED", и тогда запустится снова макрос "formula". И так по кругу, пока в столбце A не закончатся данные.
Только что у меня наконец что-то получилось! :-)
Правда очень криво... Поикрепляю файл.
Если можете что-то доплнить и улучшить, буду очень благодарен! ))
Перед началом работы нужно нажимать кнопку "Сброс", а потом "Старт".
Получение и сохранение данных полученных по DDE
 
Люди добрые! Откликнитесь пожалуйста!
Получение и сохранение данных полученных по DDE
 
Забыл вставить сам файл.

Наверняка проблема там совсем простая для специалиста.
Нужно чтобы макрос "fetchHistoricalData" не переходил к следующей строке пока не сработает макрос "formula".
Подскажите пожалуйста, как это сделать?
Получение и сохранение данных полученных по DDE
 
Приветствую всех старожилов, новичков и посетителей этого гостеприимного форума!
Эту тему начинаю в надежде довести до конца работу над файлом Эксель, который должен поочередно получать данные по DDE ссылкам и сохранять так же поочередно в отельных файлах.
Вот собственно его содержание:
Лист1
Код
Private Sub TextBox1_Change()
    If Me.TextBox1 Like "*" & "RECEIVED" & "*" Then Call fetchHistoricalData
    If Me.TextBox1 Like "*" & "FINISHED" & "*" Then Call formula
End Sub


Модуль1
Код
Public k As Long

Sub fetchHistoricalData()
'This variable will store the incoming data
'Эта переменная будет хранить поступающие данные
Dim TheArray() As Variant
'Fetch the data from the TWS...
'Принесите данные от TWS...
'(Replace sample123 with your own TWS username!)
'(Заменяют sample123 Вашим собственным именем пользователя TWS!)
TheArray = getData("ЛОГИН", "hist", "id4?result")
'... and pass the result into another function which will populate the sheet
'... и переносим результат в другую функцию, которая заполнит лист
Call populate(TheArray)
End Sub

'This function triggers a DDE request and returns its response
'Эта функция вызывает запрос DDE и возвращает его ответ
Function getData(serverName, topic, request)
Dim chan As Integer
'Initiate the DDE channel
'Инициация канала DDE
chan = Application.DDEInitiate(serverName, topic)
'Perform the request
'Выполняем запрос
getData = Application.DDERequest(chan, request)
'Terminate the channel
'Закрываем канал
Application.DDETerminate chan
End Function

'Populate our blank sheet with the incoming data
'Заполняем наш чистый лист с поступающими данными
Sub populate(ByRef TheArray() As Variant)

'Книга
NewBook = ""
' Путь, где будут храниться наши файлы
' Т.е. в той папке, откуда запустился файл с макросом
Path = ThisWorkbook.Path

' Выбираем лист с данными
Sheets("Лист1").Select
' Запускаем цикл, скажем на 100000 итераций
' Начиная со второй строки, не учитывая заголовок
For k = 2 To 10000
' Выйдем из него, когда строки закончатся
If Cells(k, 1).Value = "" Then
        k = 10000
    Exit For
End If
' Имя файла карточки, назовем по значению первой ячейки строки
Name_file = Path & "\" & Sheets("Лист1").Cells(k, 1).Value & ".xls"

    ' Создаем новую книгу или делаем ее активной
    If NewBook = "" Then
        Workbooks.Add
        NewBook = ActiveWorkbook.Name
    Else
        Workbooks(NewBook).Activate
        Cells(1, 1).Select
    End If
    
'Watch out for empty possible errors and handle properly.
'Не упустите пустые возможные ошибки и ручку должным образом.
On Error GoTo ErrHandler
For i = 1 To UBound(TheArray)
Range("A" & i + 1).Value = TheArray(i, 1)
Range("B" & i + 1).Value = TheArray(i, 2)
Range("C" & i + 1).Value = TheArray(i, 3)
Range("D" & i + 1).Value = TheArray(i, 4)
Range("E" & i + 1).Value = TheArray(i, 5)
Range("F" & i + 1).Value = TheArray(i, 6)
Range("G" & i + 1).Value = TheArray(i, 7)
Range("H" & i + 1).Value = TheArray(i, 8)
Range("I" & i + 1).Value = TheArray(i, 9)
Next
ErrHandler:

    ' Сохраняем с нашим новым названием
    ActiveWorkbook.SaveAs Filename:= _
    Name_file, FileFormat:=xlExcel8, _
    Password:="", WriteResPassword:="", ReadOnlyRecommended:=False, _
    CreateBackup:=False
    NewBook = ActiveWorkbook.Name
    Application.DisplayAlerts = True
    ' Снова активируем файл с макросом и выбираем лист
    Workbooks("Запуск макроса по DDE 02.xlsm").Activate
    Sheets("Лист1").Select
' Переходим к следующей строке
Next k
' Закроем книгу
Workbooks(NewBook).Close
' Выведем сообщение об окончании
'MsgBox ("Выполнено!")
Exit Sub
End Sub

 Sub formula()
   Range("A1").Value=Replace("=SЛОГИН|hist!'id4?req?BIDU_STK_SMART_USD_~/20170611singleSpace23singleColon59singleColon59_5singleSpaceW_11_TRADES_1_1'", "BIDU", Cells(k + 2, 1))
  ' i = i + 1
 End Sub

Sub ResetVar()
    k = 0
End Sub


Как я понял суть проблемы в том, что получив данные, макос fetchHistoricalData продолжает по циклу сохранять одни и те же данные под разными именами содержащимися в столбце A. Но должен окончив первый цикл перейти к макросу formula для запросу новых данных, чтобы получив их, сохранить под новым именем.
Помогите пожалуйста довести  его работу "до ума". А то третью неделю над ним мучаюсь при полном отсутствии умения программировать...
Вставка значения ячейки в DDE ссылку
 
Юрий, огромная Вам признательность! Вы мне очень помогли!
Подставляется все правильно! :-)
Попробую дальше сам, если не получится открою новую тему.
Вставка значения ячейки в DDE ссылку
 
Предпологаю, что проблема возможно в том что макросы работают не синхронно. Т.е. почему-то не дожидаются завершения предыдущей операции?
Попробовал заменить i на k, которое используется для цикла перехода от ячеки  к ячейке в макросе сохраняющем данные. Ничего не изменилось, работает также- во всех файлах одни и те же данные.
Вставка значения ячейки в DDE ссылку
 
Все стало работать автоматически! :-)
НО!
Цитата
Юрий М написал:
Вы отправили запрос, сервер (сайт) довольно оперативно вернул Вам ответ - макрос отправляет второй запрос и... Это всё ведь произойдёт довольно быстро - какой интервал?
Действительно, в сохранившихся файлах одинаковые данные, принадлежащие одному инструменту. Получается что макрос все подходы сохранял одни и те же данные... Вы ведь об этом и предупоеждали?...
Мой расчет был на то что каждое последующее действие начинается после окончания предыдущего. Для этого и нужен был макрос, который Вы любезно написали в предыдущей теме. Немного его видоизменил, добавив еще одну строку:

Код
Private Sub TextBox1_Change()
    If Me.TextBox1 Like "*" & "RECEIVED" & "*" Then Call fetchHistoricalData
    If Me.TextBox1 Like "*" & "FINISHED" & "*" Then Call formula
End Sub

Таким образом все должно было быть последовательно. Почему это не происходит не могу понять...

Ведь после появления RECEIVED все данные подготовлены, а после появления FINISHED, они уже должны быть записаны в файл.

В чем же кроется моя ошибка в логике?...

Файл AAL прикрепил на всякий случай, если вдруг вам что-то прояснит знание о том как выглядят получаемые данные.

Вставка значения ячейки в DDE ссылку
 
Доброго утра, Юрий!
Посмотрел Ваш пример. Либо я не понимаю логику Вашего видения процесса, либо Вы поняли иначе мои комканые объяснения.
Если успею, попробую все показать на примерах, чтобы понять где мы с Вами расходимся в представлениях алгоритма.

Сначала я вручную вставляю ссылку DDE в ячейку A1. (На самом деле это должно происходить автоматически)
Сразу же идет отправка ссылки и через несколко секунд в ячейке куда была вставлена ссылка(A1) появляется надпись: RECEIVED
Вот так это выглядит:
Хмм... Что-то не получается картинку вставить. Прикреплю файлом.

Вот тут в дело вступает TextBox, который Вы помогли мне сделать :-) Он запускает макрос который сохраняет данные. Тоже  прикреплю для примера.
Когда сохранение данных произошло, в ячейке A1 теперь появляется слово FINISHED. Снова вступает в работу Ваш TextBox и запускает макрос formula, который долже отправить в ячейку A1 такую же ссылку, но с изменением акции. которую он должен взять из ячейки A3, а предыдущую должен был брать из A2.

Наверное снова сумбурно все объяснил... Простите, просто очень ограничен во времени...
Вставка значения ячейки в DDE ссылку
 
Цитата
Юрий М написал:
Если так, то зачем его В СТРОКЕ менять? Оно ведь УЖЕ там будет.
Но откуда же он там возьмется? Ведь для того чтобы его отправить, нужно чтобы в ссылке вставлялось значение ячейки...
Я Вас тоже не могу понять... )) Но это скорее всего от моей безграмотности...
Объясните на пальцах как необразованному ))
P.s. Сегодня отвечать уже не смогу.
Вставка значения ячейки в DDE ссылку
 
Да, местоположение названия акции всегда находится в одном и том же месте.
Вставка значения ячейки в DDE ссылку
 
Да, я продолжаю делать тот же файл с макросами, для сохранения исторических данных акций в файлы эксель.
Вы тогда дали мне понять, что не стоит задавать другие вопросы в несоответствующей теме. Попытался решить проблему самостоятельно, но увы, ничего не вышло...
Вставка значения ячейки в DDE ссылку
 
Здравствуйте, Юрий!
Очень рад, что Вы откликнулись на мой вопрос.
Но не совсем понимаю, что Вы имеете ввиду. Попробую описать алгоритм и цель того что мне нужно.
В ячейку A1 макрос вставляет ссылку DDE: =SЛОГИН|hist!'id4?req?AAL_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

AAL должно быть взято из ячейки A2
Сылка отправляется, полученные данные сохраняются в новый файл.

Снова вставляется ссылка в ячейку A1, но в ней уже вместо AAL должна быть аббревиатура другой акции AAPL которая расположена в ячейке A3:

=SЛОГИН|hist!'id4?req?AAPL_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

Полученные данные сохраняются в новый файл и вновь вставляется в ячейку A1 ссылка с акцией имя которой прописано в ячейке A4
И т.д.

Все это нужно для того чтобы автоматизировать получение данных по тысячам акций. Данные каждой записываются в отдельный документ Эксель и сохраняются в нужную папку.
Мне впервые пришлось пытаться писать макрос в Экселе, поэтому с терминологией и функциями совершенно не знаком... :-)

Вставка значения ячейки в DDE ссылку
 
Приветствую, уважаемые!
Простите если вопрос будет совсем наивным...

Подскажите, как в ссылку DDE вставить значение из ячейки с помощью макроса?

Вот пример вставки DDE ссылки в  ячейку A1:
Код
 Sub formula()
   Range("A1").Value = "=SЛОГИН|hist!'id4?req?AAPL_STK_SMART_USD_~/20170611singleSpace23singleColon59singleColon59_5singleSpaceW_11_TRADES_1_1'"
 End Sub
Нужно чтобы часть этой ссылки была заменена значением из ячейки A2 и в таком виде отправлена в ячеку A1.
А если конкретно, то вместо аббревиатуры AAPL находящейся в этой ссылки была подставлена другая аббревиатура из ячейки A2.
Подскажите пожалуйста, как это сделать?

Пробовал ставить &A2&, но так не получается...
Активация макроса ссылкой DDE
 
Да получил очень полезный ответ! Спасибо!
Прошу прощения за отвлечение от темы.
Удалите, если считаете нужным, то что к теме не относится.

С уважением, Алексей.
Активация макроса ссылкой DDE
 
Цитата
Юрий М написал:
Я опять не понял про "подставить" - ведь у Вас уже ПОСТУПИЛИ некие данные - зачем в них что-то подставлять?
Нет конечно, в поступившие данные подставлять ничего ненужно.
Логика такова:
1) Формируется и отправляется ссылка DDE
2) Когда данные получены, открывается новый документ Экселя, в него вставляются полученные данные, а затем он сохраняется в папку с именем той акции данные которой в нем записаны
3) Снова формируется ссылка DDE, но уже для другой акции. И т.д.

Вот именно для формирования новой ссылки мне и нужно автоматически менять имя акции содержащееся в ней.
Активация макроса ссылкой DDE
 
Цитата
Юрий М написал:
КУДА подставить?
Дело в том что нужно получать большое количество данных, т.е. тысячи раз формировать и отправлять заново ссылку DDE:

=SЛОГИН|hist!'id4?req?BIDU_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

вот еще вариант:
=SЛОГИН|hist!'id4?req?AAL_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

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

=SЛОГИН|hist!'id4?req?ИМЯ_ЯЧЕЙКИ_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

Но если я просто ставлю например A3, то и в новой ссылке очтается A3... Это и понятно, ведь в макросе все взято в кавычки.
А вот как сделать чтобы все заработало с подстановкой не соображу...
Для замены ссылки использую такой макрос:
Код
 Sub formula()
 Range("A1").Value = "=SЛОГИН|hist!'id4?req?ИМЯ_ЯЧЕЙКИ_STK_SMART_USD_~/20170611singleSpace23singleColon59singleColon59_5singleSpaceW_11_TRADES_1_1'"
 End Sub
Активация макроса ссылкой DDE
 
Будьте добры, просветите меня еще в одном вопросе.
Вот ссылка DDE:    =SЛОГИН|hist!'id4?req?AAPL_STK_SMART_USD_~/20170611singleSpace23singleColon59singleCol­on59_5singleSpaceW_11_TRADES_1_1'

Как подставить вместо выделенного красным AAPL значение находящееся в определенной ячейке?
Страницы: 1 2 След.
Наверх