如果列的数据发生更改,如何运行启用DDE的宏

时间:2015-08-23 11:55:55

标签: excel vba excel-vba

我试图将少量数据从MSExcel写入PLC标签。在这里,我使用DDEpoke指令并运行我的宏,它将数据完美地写入我的PLC。现在我希望自动完成此操作。只要列中的值发生更改(基于前面列中的计算),启用DDE的宏就必须运行宏以将这些标记写入PLC。我尝试了许多宏来执行宏的自动运行,但它要么不工作,要么我做错了。有人请帮帮我。

代码:

    Sub PLC_Transfer()
'
' PLC_Transfer Macro
'
'
' DDE_Transfer Macro
' Transfer DDE data to PLC
'
RSLinx_channel = DDEInitiate("RSLinx", "Excel")
'write data thru channel
DDEPoke RSLinx_channel, Range("X6"), Range("W6")
DDEPoke RSLinx_channel, Range("X7"), Range("W7")
DDEPoke RSLinx_channel, Range("X8"), Range("W8")
DDEPoke RSLinx_channel, Range("X9"), Range("W9")
DDEPoke RSLinx_channel, Range("X10"), Range("W10")
DDEPoke RSLinx_channel, Range("X11"), Range("W11")
DDEPoke RSLinx_channel, Range("X12"), Range("W12")
DDEPoke RSLinx_channel, Range("X13"), Range("W13")
DDEPoke RSLinx_channel, Range("X14"), Range("W14")
DDEPoke RSLinx_channel, Range("X15"), Range("W15")
DDEPoke RSLinx_channel, Range("X16"), Range("W16")
DDEPoke RSLinx_channel, Range("X17"), Range("W17")
DDEPoke RSLinx_channel, Range("X18"), Range("W18")
DDEPoke RSLinx_channel, Range("X19"), Range("W19")
DDEPoke RSLinx_channel, Range("X20"), Range("W20")
DDEPoke RSLinx_channel, Range("X21"), Range("W21")
DDEPoke RSLinx_channel, Range("X22"), Range("W22")
DDEPoke RSLinx_channel, Range("X23"), Range("W23")
DDEPoke RSLinx_channel, Range("X25"), Range("W24")
DDEPoke RSLinx_channel, Range("X25"), Range("W25")

'close dde channel
DDETerminate (RSLinx_channel)
End Sub

这是我用于将标签写入PLC的宏。这里是如何添加监控列中变化的指令' W' ?

编辑: 在这里我添加了一个例如清楚的理解

00:00 AM

W   X            
0   Excel_TBM101
0   Excel_TBM101
0   Excel_TBM102
0   Excel_TBM103
0   Excel_TBM104
0   Excel_TBM105
0   Excel_TBM106

上午00:05

W   X            
0   Excel_TBM101
0   Excel_TBM101
0   Excel_TBM102
1   Excel_TBM103
0   Excel_TBM104
0   Excel_TBM105
0   Excel_TBM106

'运行PLC_Transfer宏以更改Excel_TBM103的标记值

上午00:23

W   X            
0   Excel_TBM101
0   Excel_TBM101
0   Excel_TBM102
0   Excel_TBM103
0   Excel_TBM104
0   Excel_TBM105
0   Excel_TBM106

'运行PLC_Transfer宏以更改Excel_TBM103的Tag值

更新: 我尝试使用以下代码来至少检查代码是否可以自动调用我的宏,以便我可以稍后为该列扩展它,但代码似乎根本不会调用我的宏。

Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Target.Worksheet.Range("W23")) Is Nothing Then PLC_Transfer End Sub

0 个答案:

没有答案