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

Страницы: 1
Изменение условия макроса если он простаивает
 
Здравствуйте уважаемые!
Подскажите, как можно изменить условие в макросе, если он остановился и простоял на одном месте, допустим 15 секунд?
Добавление новых данных в старые файлы макросом.
 
Приветствую всех  наилучшими пожеланиями!

Имеем файл с макросами, который получает данные посылая 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
 
Приветствую всех старожилов, новичков и посетителей этого гостеприимного форума!
Эту тему начинаю в надежде довести до конца работу над файлом Эксель, который должен поочередно получать данные по 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 вставить значение из ячейки с помощью макроса?

Вот пример вставки 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 которая запрашивает данные из другой программы. В этот момент высвечивается слово- PROCESSING.Когда данные подготовлены появляется слово RECEIVED. А после того как макрос их сохраняет в новый файл- FINISHING.
Пока что все эти процессы запускаются вручную поочереди, но так как данных очень много и вручную нажимать так на кнопки весь день нереально, то нужно чтобы все это работало в нужной последовательности само.
Самым логичным мне представляется запускать каждый макрос в зависимости от того какое слово на данный момент в ячейке со ссылкой DDE.
Перепробовал множество вариантов (уже две недели мучаюсь...), но ничего не получается. Когда запускаешь все вручную, то макрос активизируется реагируя на слово появляющееся в ячейке и то не всегда, а само все работать не хочет. Предполагаю, что причина может скрываться в том что ячейка в момент изменения в ней слов, неактивна. Но возможно причина совсем в другом.
Помогите пожалуйста, сделать условие которое будет запускать нужный макрос в зависимости от того какое слово сейчас находится в ячейке со ссылкой DDE.

Вот так выглядит ссылка DDE:
=SЛОГИН|hist!'id4?req?AAPL_STK_SMART_USD_~/20170611singleSpace23singleColon59singl­eColon59_2singleSpaceW_11_TRADES_1_1'  

А вот сам макрос который нужно запускать после того как данные будут готовы и появится слово- RECEIVED.
Скрытый текст
Изменено: krest - 21.06.2017 18:47:18
Страницы: 1
Наверх