если автоматически изменяется значение данных только одной ячейки или диапазона («b2: e2»), как скопировать каждое из значений данных для вставки в другой файл sheet.cell (i, 1)? - PullRequest
1 голос
/ 17 мая 2019

enter image description here

Данные загружаются в мой Excel в режиме реального времени из программы HTS.его значение меняется.поэтому я хочу, чтобы его данные автоматически копировались для вставки в другой лист2 и в каждую ячейку по одной переменной за раз.такие как

cells(1,1) = 200 cell(1,2) = alpa
cells(2,1) = 250 cell(2,2) = veta
cells(i,1) = ___ cell(i,2) = _____
...............................

и так далее.так как я могу набрать код для автоматической работы, как это?и вы должны знать, что его данные имеют некоторые формулы, и я хочу только значения. Его диапазон - это диапазон ("B2: E2"), не включая формулы.

enter image description here

Я попробовал этот код, но он не работает автоматически для заполнения ячейки.Это работает, только когда я щелкаю по изменяющимся значениям ячейки и только одной ячейке, а не диапазону.

Option Explicit

Private Sub Worksheet_Change(ByVal Target As Range)

    Dim ws1 As Worksheet, ws2 As Worksheet
    Dim ColNo As Long, ColLR As Long

    With ThisWorkbook
        Set ws1 = .Worksheets("Sheet1")
        Set ws2 = .Worksheets("Sheet2")
    End With

    If Not Intersect(Target, ws1.Range("B2:E2")) Is Nothing And Target.Count = 1 Then

        ColNo = Target.Column

        With ws2

            ColLR = .Cells(.Rows.Count, ColNo).End(xlUp).Row
            .Cells(ColLR + 1, ColNo).Value = Target.Value

        End With

    End If

End Sub

этот код работает так, как вы должны видеть на картинке.

enter image description here

и я не хочу этого, но диапазон ("B2: E2") автоматически заполняет ячейку один за другим

1 Ответ

0 голосов
/ 18 мая 2019

Может попробовать что-то вроде следующего

Public Var1, Var2, Var3, Var4
Private Sub Workbook_Open()
Dim Ws As Worksheet
Set Ws = ThisWorkbook.Sheets("Sheet1")

    With Ws
    'May use loop or Directly assigned  to array if range is large
    Var1 = .Range("B2").Value
    Var2 = .Range("C2").Value
    Var3 = .Range("D2").Value
    Var4 = .Range("E2").Value
    End With

End Sub

и Sheet1 Рассчитать событие

Private Sub Worksheet_Calculate()
Dim Cvar1, Cvar2, Cvar3, Cvar4
Dim LastRow As Long


    Dim Ws1 As Worksheet, Ws2 As Worksheet
    Dim ColNo As Long, ColLR As Long

    With ThisWorkbook
    Set Ws1 = .Worksheets("Sheet1")
    Set Ws2 = .Worksheets("Sheet2")
    End With


    With Ws1
    Cvar1 = .Range("B2").Value
    Cvar2 = .Range("C2").Value
    Cvar3 = .Range("D2").Value
    Cvar4 = .Range("E2").Value
    End With

    If Cvar1 <> Var1 Or Cvar2 <> Var2 Or Cvar3 <> Var3 Or Cvar4 <> Var4 Then
        With Ws2
        LastRow = .Range("B" & Rows.Count).End(xlUp).Row + 1
        .Range("B" & LastRow).Value = Cvar1
        .Range("C" & LastRow).Value = Cvar2
        .Range("D" & LastRow).Value = Cvar3
        .Range("E" & LastRow).Value = Cvar4
        .Range("A" & LastRow).Value = Now    ' Used to log time in column A. May delete this line if not required

        Var1 = Cvar1
        Var2 = Cvar2
        Var3 = Cvar3
        Var4 = Cvar4
        End With
    End If

End Sub

изменить код в соответствии с вашими требованиями

...