Excel & DDE
Модератор: Naeel Maqsudov
Здравствуйте!
Подскажите, пожалуйста, следующие:
Ячейка А1 обращается к серверу DDE (=QR|TIME!EURUSD)
Что и где необходимо прописать, что бы после каждого изменения данных в ячейке строка запроса автоматически переводилась далее вниз А2,А3,………
Пример:1 DDE запрос (=QR|TIME!EURUSD)
..|А
1|15/24
2|15/28
3|15/40
4|16/00
5|19/00
или
Пример:2 DDE запрос (=QR|OPEN!GBPUSD)
..|А
1|1.2130
2|1.2145
3|1.2134
4|1.2147
5|1.2129
p.s..... в VBA я чайник, знаю что надо почитать, поучить, все это будет, а сейчас помогите решить озвученную ранее задачу........
Подскажите, пожалуйста, следующие:
Ячейка А1 обращается к серверу DDE (=QR|TIME!EURUSD)
Что и где необходимо прописать, что бы после каждого изменения данных в ячейке строка запроса автоматически переводилась далее вниз А2,А3,………
Пример:1 DDE запрос (=QR|TIME!EURUSD)
..|А
1|15/24
2|15/28
3|15/40
4|16/00
5|19/00
или
Пример:2 DDE запрос (=QR|OPEN!GBPUSD)
..|А
1|1.2130
2|1.2145
3|1.2134
4|1.2147
5|1.2129
p.s..... в VBA я чайник, знаю что надо почитать, поучить, все это будет, а сейчас помогите решить озвученную ранее задачу........
Раз все молчат, значит, я не правильно сформулировал вопрос.
Перефразирую.
Допустим что в ячейке А1 введено: =QR|BID!GBPUSD (результат запроса будет выглядеть так: 1,4950).
Информация в данном случае будет обновляться динамически, по мере поступления на компьютер.
Но мне необходимо что бы не обновлялось, а добавлялось по столбцам или строкам, т.е. каждое новое значение сдвигалось в следующую ячейку.
Для этого необходимо написать макрос.
Вот собственно о чем я и прошу, как должен выглядеть данный макрос.
Заранее благодарен.
Перефразирую.
Допустим что в ячейке А1 введено: =QR|BID!GBPUSD (результат запроса будет выглядеть так: 1,4950).
Информация в данном случае будет обновляться динамически, по мере поступления на компьютер.
Но мне необходимо что бы не обновлялось, а добавлялось по столбцам или строкам, т.е. каждое новое значение сдвигалось в следующую ячейку.
Для этого необходимо написать макрос.
Вот собственно о чем я и прошу, как должен выглядеть данный макрос.
Заранее благодарен.
Я не знаю что такое DDE (=QR|TIME!EURUSD), но если надо сдвигать ячейки при вводе значения то:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("A2").Insert Shift:=xlDown
Range("A2") = Target
Target.Select
End If
End Sub
это в модуле листа, для ячейки А1
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Address = "$A$1" Then
Range("A2").Insert Shift:=xlDown
Range("A2") = Target
Target.Select
End If
End Sub
это в модуле листа, для ячейки А1
Ладно, давайте забудем про =QR|TIME!EURUSD и сформулируем задачу иначе.
Имеем две книги Excel:
1. Test1
2. Test2
Так вот что мне хотелось бы:
В книге Test1 вводим любое числовое значение (12) в ячейке А1
В книге Test2 это значение должно отразится тоже в А1
Далее в книге Test1 меняем значение 12 на 15
В книге Test2 должно отразится данное изменение, но по адресу А2, сохранив при этом в А1 предыдущее значение (12)
И так далее в Test1 А1 происходит смена числовых значений которые должны отражаться в Test2 в следующей пустой ячейке.
Как мне кажется, должен быть следующий алгоритм в книге Test2:
1. функция, ссылающаяся на ячейку книги Test1, в которой меняются данные
2. функция, которая бы переходила на следующую строку и записывала изменения, каждый раз, когда они происходят.
3. затем должна быть функция, которая проверяет, сколько строчек уже внесено, т.е. найти последнюю заполненную строчку и внести новое значение в следующую пустую ячейку.
Вот.
Как это сделать я не знаю и знакомых, хоть сколько нибуть знающих нет.
Имеем две книги Excel:
1. Test1
2. Test2
Так вот что мне хотелось бы:
В книге Test1 вводим любое числовое значение (12) в ячейке А1
В книге Test2 это значение должно отразится тоже в А1
Далее в книге Test1 меняем значение 12 на 15
В книге Test2 должно отразится данное изменение, но по адресу А2, сохранив при этом в А1 предыдущее значение (12)
И так далее в Test1 А1 происходит смена числовых значений которые должны отражаться в Test2 в следующей пустой ячейке.
Как мне кажется, должен быть следующий алгоритм в книге Test2:
1. функция, ссылающаяся на ячейку книги Test1, в которой меняются данные
2. функция, которая бы переходила на следующую строку и записывала изменения, каждый раз, когда они происходят.
3. затем должна быть функция, которая проверяет, сколько строчек уже внесено, т.е. найти последнюю заполненную строчку и внести новое значение в следующую пустую ячейку.
Вот.
Как это сделать я не знаю и знакомых, хоть сколько нибуть знающих нет.
Проверил есче раз Ваш код, но это не то что мне хотелось бы, а именно:
1. Сдвигает значения вниз, а нужно внизу выводить изменение значений
2. Если поставить пробел или нажать дел, то тоже сдвигает значения вниз оставляя ячейку пустой
3. Если в А1 прописать ссылку на В1 (=В1), то изменяя значения в В1 других изменений, коме как в А1 не происходит.
Вот если бы эти пункты исправить, то было бы для начала здорово.
1. Сдвигает значения вниз, а нужно внизу выводить изменение значений
2. Если поставить пробел или нажать дел, то тоже сдвигает значения вниз оставляя ячейку пустой
3. Если в А1 прописать ссылку на В1 (=В1), то изменяя значения в В1 других изменений, коме как в А1 не происходит.
Вот если бы эти пункты исправить, то было бы для начала здорово.
Дорабатываю на ходу
Если книга Книга2.xls закрыта напиши полный путь.
Насчёт формулы - может проще её выполнить на VBA, я думаю это не =B1?
Код: Выделить всё
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Max As Long
If Target.Address = "$A$1" And Len(Trim(Target)) > 0 Then
Max = Workbooks("Книга2.xls").Sheets("Лист1").Range("A65536").End(xlUp).Row
Workbooks("Книга2.xls").Sheets("Лист1").Cells(Max + 1, 1) = Target
End If
Target.Select
End Sub
Насчёт формулы - может проще её выполнить на VBA, я думаю это не =B1?
Сейчас попробую..........
Пункт1 и пункт2 которые меня не устраивали сейчас работают как надо (ура),
но пункт3 попрежнему остается актуален.
Если в ручную вводить данные, то работает здорово, а если использовать ссылку на данные, то нет.
Насчет формулы, то я использую запрос на сервер данных.
Т.е. если там изменились данные, то и у меня должны изменится в той ячейке где прописан запрос .
запрос: QR|BID!GBPUSD
значения запроса: 1,88 или 1,82 каждый раз абсолютно разные, меняется у них должно изменится у меня.
но пункт3 попрежнему остается актуален.
Если в ручную вводить данные, то работает здорово, а если использовать ссылку на данные, то нет.
Насчет формулы, то я использую запрос на сервер данных.
Т.е. если там изменились данные, то и у меня должны изменится в той ячейке где прописан запрос .
запрос: QR|BID!GBPUSD
значения запроса: 1,88 или 1,82 каждый раз абсолютно разные, меняется у них должно изменится у меня.
Я не попробовал это с запросом, но думаю будет работать
Код: Выделить всё
Private Sub Worksheet_Calculate()
Dim Max As Long
Static XX As String
If XX <> Range("A1").Value And Len(Trim(Range("A1"))) > 0 Then
Max = Workbooks("Книга2.xls").Sheets("Лист1").Range("A65536").End(xlUp).Row
Workbooks("Книга2.xls").Sheets("Лист1").Cells(Max + 1, 1) = Range("A1")
End If
XX = Range("A1").Value
End Sub
Если вводить ручками и в А1 писать откуда брать данные, то все нормально, а вот если в ячейке писать запрос на сервер данных, а в А1 ссылаться на ячейку запроса, то
пишет:
Run-time error `13`:
Type mismatch
Нажимаю Debug
Открывается окно редактора VB и там подсвечена следующая строка:
If XX <> Range("A1").Value And Len(Trim(Range("A1"))) > 0 Then
пишет:
Run-time error `13`:
Type mismatch
Нажимаю Debug
Открывается окно редактора VB и там подсвечена следующая строка:
If XX <> Range("A1").Value And Len(Trim(Range("A1"))) > 0 Then