Регистрация всех изменений в определенном формате в листе Excel - PullRequest
0 голосов
/ 24 мая 2019

У меня есть лист Excel с именами STOCKS, который автоматически обновляет котировки акций, такие как название акции, время, последняя сделка, ставка, ставка Ask и т. Д.

Stock Name | Time | Last Trade Rate | Bid Price | Offer Price
1 ACC      | 10.40am| 42            | 41        | 43
2 INFY     | 10.40am| 100           | 99        | 101
3 TECH     | 10.40am| 140           | 136       | 142

Цены и другие все строкизначения для каждого запаса постоянно меняются каждую секунду и автоматически обновляются по мере изменения цены или предложения, предложения меняются.

Я должен добавить отдельный рабочий лист с именем LOGSSHEET

Что требуется для кода Exceldo:

Если какое-либо значение ячейки в каком-либо столбце изменяется, то я хочу зарегистрировать то же самое в LOGSHEET, где копируется / регистрируется вся COLUMN

Например, если цена предложения для INFY Stock Changes, тогда вся ROW (В этом случае строка, содержащая Stock INFY) должна быть зарегистрирована / скопирована в LOGSHEET

Пример: 2 INFY |10:40 утра |100 |99 |101

Аналогичным образом, если, скажем, цена предложения или время, или изменение курса последней сделки для другого или того же сценария будут отображаться, они будут вставлены / записаны под ранее зарегистрированной записью. Например:

2 INFY     | 10.40am| 100           | 99.10        | 101
3 TECH     | 10.40am| 140.50           | 136       | 142

И т. Д..

Я не большой программист Excel VBA, но я нашел этот код, который записывает что-то, но не всю строку, как организовано.

Я нашел код, который делает что-то похожее неорганизованно, ноне совсем то, что я хочу

Пример кода:

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim strAddress As String
    Dim val
    Dim dtmTime As Date
    Dim Rw As Long

    If Intersect(Target, Range("A1:M1000")) Is Nothing Then Exit Sub
       'change range to suit
    dtmTime = Now()
    val = Target.Value
    strAddress = Target.Address


    Rw = Sheets("Log Sheet").Range("A" & Rows.Count).End(xlUp).Row + 1
    With Sheets("Log Sheet")
        .Cells(Rw, 1) = strAddress
        .Cells(Rw, 2) = val
        .Cells(Rw, 3) = dtmTime
        .Cells(Rw, 3) = Stocks
    End With
End Sub

Ответы [ 2 ]

2 голосов
/ 24 мая 2019

Скопируйте приведенный ниже код в модуль рабочего листа STOCKS. Это скопирует всю строку, если в ней изменится значение ячейки (не проверено).

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim lRowLogSheet As Long

    'adjust the below target range to suit your needs
    If Intersect(Target, Range("C4:C8")) Is Nothing Then Exit Sub

    'find the last row in the log sheet
    lRowLogSheet = Sheets("LOGSSHEET").Range("A" & Sheets("LOGSSHEET").Rows.Count).End(xlUp).Row + 1

    'set the values of the row
    Sheets("LOGSSHEET").Range("A" & lRowLogSheet, "E" & lRowLogSheet).Value = Sheets("STOCKS").Range("A" & Target.Row, "E" & Target.Row).Value

End Sub
1 голос
/ 24 мая 2019

Вот как вы это делаете:

Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)

    Dim Rw As Long

    If Intersect(Target, Range("A1:M1000")) Is Nothing Then Exit Sub

    With ThisWorkbook.Sheets("Log Sheet")
        Rw = .Cells(.Rows.Count, 1).End(xlUp).Row + 1
        Me.Rows(Target.Row).Copy .Cells(Rw, 1)
    End With

End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...