任何人都可以提供帮助,
我正在尝试在Excel中编写宏来记录通过PLC进入excel的信息。
我有一行数据,当Trigger单元格从0开始时,我想要向下移动一行。 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值都不同,并且情况并非总是如此,因此您需要稍微修改该部分。