Доброго времени суток Есть файл, в котором данные таблицы обновляются из внешних источников (Лист1) (Ровно последние 100 данных (тоесть было 100, данные обновились и стало опять 100 т.к самый верхний удалился)). На листе 2 есть прогноз (в данном случае примитивный для понимания задачи). Изменение данных происходит каждые 15 минут (разыгрывается тираж) Нужно, чтобы при каждом изменении данных таблица смотрела результаты прогноза и вносила их с новой строки в соответствии с номером тиража нужно сделать хотя бы для 1 числа для понимания p.s в макросы еще не лез (полный нуб), но думаю это обычной формулой нельзя осуществить, поэтому решил обратиться через макрос помогите пожалуйста
Доброго времени суток Есть файл, в котором данные таблицы обновляются из внешних источников (Лист1) (Ровно последние 100 данных (тоесть было 100, данные обновились и стало опять 100 т.к самый верхний удалился)). На листе 2 есть прогноз (в данном случае примитивный для понимания задачи). Изменение данных происходит каждые 15 минут (разыгрывается тираж) Нужно, чтобы при каждом изменении данных таблица смотрела результаты прогноза и вносила их с новой строки в соответствии с номером тиража нужно сделать хотя бы для 1 числа для понимания p.s в макросы еще не лез (полный нуб), но думаю это обычной формулой нельзя осуществить, поэтому решил обратиться через макрос помогите пожалуйстаArtemon
Private Sub q_AfterRefresh(ByVal Success As Boolean) ' Debug.Print "AfterRefresh", Now With Sheet2 LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row If LastRow < 5 Then LastRow = 4 If Sheet1.Range("A101") <> .Cells(LastRow, 1) Then arr = Sheet1.Range("A101:U101") For i = 2 To UBound(arr, 2) If (arr(1, i) Mod 2) - 1 Then arr(1, i) = "Чёт" Else arr(1, i) = "Нечёт" End If Next .Cells(LastRow + 1, 1).Resize(, UBound(arr, 2)) = arr End If
End With End Sub
'Private Sub q_BeforeRefresh(Cancel As Boolean) ' Debug.Print "BeforeRefresh", Now 'End Sub
Private Sub Workbook_Open() ' Application.OnTime Now, Me.Name & ".Start" Set q = Sheet1.QueryTables(1) End Sub
'Sub Start() ' Set q = Sheet1.QueryTables(1) 'End Sub
[/vba]
в модуль книги
[vba]
Код
Dim WithEvents q As QueryTable
Private Sub q_AfterRefresh(ByVal Success As Boolean) ' Debug.Print "AfterRefresh", Now With Sheet2 LastRow = .Cells(.Cells.Rows.Count, 1).End(xlUp).Row If LastRow < 5 Then LastRow = 4 If Sheet1.Range("A101") <> .Cells(LastRow, 1) Then arr = Sheet1.Range("A101:U101") For i = 2 To UBound(arr, 2) If (arr(1, i) Mod 2) - 1 Then arr(1, i) = "Чёт" Else arr(1, i) = "Нечёт" End If Next .Cells(LastRow + 1, 1).Resize(, UBound(arr, 2)) = arr End If
End With End Sub
'Private Sub q_BeforeRefresh(Cancel As Boolean) ' Debug.Print "BeforeRefresh", Now 'End Sub
Private Sub Workbook_Open() ' Application.OnTime Now, Me.Name & ".Start" Set q = Sheet1.QueryTables(1) End Sub
'Sub Start() ' Set q = Sheet1.QueryTables(1) 'End Sub
bmv98rus, если я правильно понял, то вы написали код именно чтобы программа прогнозировала а нужно, чтобы уже готовый прогноз на втором листе (таблица) копировалась каждый раз при смене значений так, чтобы в будущем на одной строке были одинаковые тиражи и они также сдвигались вверх по мере поступления новых
bmv98rus, если я правильно понял, то вы написали код именно чтобы программа прогнозировала а нужно, чтобы уже готовый прогноз на втором листе (таблица) копировалась каждый раз при смене значений так, чтобы в будущем на одной строке были одинаковые тиражи и они также сдвигались вверх по мере поступления новыхArtemon
В ячейках листа 2 А5-U5 есть значения таблицы. При изменении этой таблицы, её значения должны копироваться и вставляться на лист 1 в диапазон AC102-AW102. При следующем изменении то, что было в диапазоне AC102-AW102 перемещается на 1 строчку вверх, а на это место переносится следующее новое значение А5-U5. И так каждый раз предыдущие значения уходят вверх по мере поступления новых значений и когда оно доходит до самого верха просто удаляется (номера тиражей слева в 1 листе и справа на одной строчке всегда равны)
В ячейках листа 2 А5-U5 есть значения таблицы. При изменении этой таблицы, её значения должны копироваться и вставляться на лист 1 в диапазон AC102-AW102. При следующем изменении то, что было в диапазоне AC102-AW102 перемещается на 1 строчку вверх, а на это место переносится следующее новое значение А5-U5. И так каждый раз предыдущие значения уходят вверх по мере поступления новых значений и когда оно доходит до самого верха просто удаляется (номера тиражей слева в 1 листе и справа на одной строчке всегда равны)Artemon
Сообщение отредактировал Artemon - Воскресенье, 31.03.2019, 20:22
Чиорт поберы. Это я скопировал криво. Заменил файл. Но есть одно но, что делать если поезд ушел? Тоесть когда последний розыгрыш уже с очень большим номером чем ожидаем? секйчас строго [vba]
Код
If .Range("A101") = .Range("AC102") Then
[/vba]но если надо любой следующий, то [vba]
Код
If .Range("A101") >= .Range("AC102") Then
[/vba]
Чиорт поберы. Это я скопировал криво. Заменил файл. Но есть одно но, что делать если поезд ушел? Тоесть когда последний розыгрыш уже с очень большим номером чем ожидаем? секйчас строго [vba]
bmv98rus, да, шикарно, то, что нужно Вы имеете ввиду если значения дойдут до самого верха куда им дальше деваться? просто удаляются как и левая таблица спасибо огромнейшее за вашу помощь!
bmv98rus, да, шикарно, то, что нужно Вы имеете ввиду если значения дойдут до самого верха куда им дальше деваться? просто удаляются как и левая таблица спасибо огромнейшее за вашу помощь!Artemon
не совсем, я имел в виду что если более 15 минут файл не работает, то номер розыгрыша в погнозе будет N а придет N+1 или более. И запрос делается каждую минуту. Ест ь ли смысл делать так часто?
не совсем, я имел в виду что если более 15 минут файл не работает, то номер розыгрыша в погнозе будет N а придет N+1 или более. И запрос делается каждую минуту. Ест ь ли смысл делать так часто?bmv98rus
Замечательный Временно просто медведь , процентов на 20.
bmv98rus, ну в дальнейшем, если с проектом, связанный с этим макросом будет все хорошо, то он будет помещен на vds сервер под постоянное открытие а так необязательно раз в минуту, можно реже, просто тираж могут выложить позже на допустим секунд 20, 30 или минуту-две позже и если не обновилось в ту секунду, когда сам тираж выложили, то придется ждать еще столько времени сколько указано (2, 3 или более минут). поэтому удобно раз в минуту осталось только разобраться самому в макросе и перенести на основной файл спасибо!!!!
bmv98rus, ну в дальнейшем, если с проектом, связанный с этим макросом будет все хорошо, то он будет помещен на vds сервер под постоянное открытие а так необязательно раз в минуту, можно реже, просто тираж могут выложить позже на допустим секунд 20, 30 или минуту-две позже и если не обновилось в ту секунду, когда сам тираж выложили, то придется ждать еще столько времени сколько указано (2, 3 или более минут). поэтому удобно раз в минуту осталось только разобраться самому в макросе и перенести на основной файл спасибо!!!!Artemon
Сообщение отредактировал Artemon - Понедельник, 01.04.2019, 00:11