将Excel中的宏写入数据日志

时间:2017-08-25 12:56:35

标签: excel vba

任何人都可以提供帮助,

我正在尝试在Excel中编写宏来记录通过PLC进入excel的信息。

我有一行数据,当Trigger单元格从0开始时,我想要向下移动一行。 1。

任何后续触发器都会再次向下移动行并在上面插入新捕获的数据。等等。

干杯

1 个答案:

答案 0 :(得分:0)

附加到日志的功能只需要确定最后使用的行,然后添加新数据。您可以使用PLC IP /地址(如果使用多个)或任何其他原始资源名称替换fName。你可以组合LastRow代码,但我也在许多其他例程中使用它,所以我把它作为一个独立的函数。

在我的功能中,我只是将信息发送到录像机,如下所示:

RecordLog ftpFileReceived, ftpStatus

这是功能:

Sub RecordLog(fName As String, Status As String)
    Const F = "Import_Log"
    LR = LastRow(F, "A")
    Worksheets(F).Range("A" & LR + 1).Formula = Now()
    Worksheets(F).Range("B" & LR + 1).Formula = fName
    Worksheets(F).Range("C" & LR + 1).Formula = Status
End Sub
Function LastRow(Tabname As String, Col As String) As Long
    With Worksheets(Tabname)
       LastRow = .Cells(Rows.Count, Col).End(xlUp).Row
   End With
End Function

通过工作表函数SelectionChange激活从PLC记录的输入中触发此操作。代码必须放在您正在监控的电子表格的模块中。

如果PLC正在生成所有更新,您不必担心更新了哪个单元格,这将记录所有新值:

Private Sub Worksheet_Change(ByVal Target As Range)
    RecordLog "PLC", "Value: " & Target
End Sub

如果您的电子表格是通过PLC以外的方式更新的,并且您只想记录PLC更改,则只能记录电子表格中特定单元格的更新。

Private Sub Worksheet_Change(ByVal Target As Range)
    Static LastValue As Variant
    If Worksheets("Sheet1").Range("C2").Value <> LastValue Then
        LastValue = Worksheets("Sheet1").Range("C2").Value
        RecordLog "PLC", "Value: " & LastValue
    End If
End Sub

这假设每个PLC值都不同,并且情况并非总是如此,因此您需要稍微修改该部分。