从EXCEL在PLC中写入变量
我有一个用于TCP/IP的ActiveX通信驱动程序,允许我从Excel文件读写PLC。我想在Excel中用另外5个单元格来写5 MW的值,我用loop试过了,一次只在5个变量中写一个值。现在我有一个“选择案例”,它对我不起作用。请帮忙。代码如下:从EXCEL在PLC中写入变量,excel,vba,plc,Excel,Vba,Plc,我有一个用于TCP/IP的ActiveX通信驱动程序,允许我从Excel文件读写PLC。我想在Excel中用另外5个单元格来写5 MW的值,我用loop试过了,一次只在5个变量中写一个值。现在我有一个“选择案例”,它对我不起作用。请帮忙。代码如下: For tt = 1 To 5 valor(1) = Val(Cells(1, 4).Value) valor(2) = Val(Cells(2, 4).Value) valor(3) = Val(Ce
For tt = 1 To 5
valor(1) = Val(Cells(1, 4).Value)
valor(2) = Val(Cells(2, 4).Value)
valor(3) = Val(Cells(3, 4).Value)
valor(4) = Val(Cells(4, 4).Value)
valor(5) = Val(Cells(5, 4).Value)
Next tt
Select Case valor(tt)
Case valor(1)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 5, 1, 1000, 300, valor)
Case valor(2)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 6, 1, 1000, 300, valor)
Case valor(3)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 7, 1, 1000, 300, valor)
Case valor(4)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 8, 1, 1000, 300, valor)
Case valor(5)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 9, 1, 1000, 300, valor)
End Select
该行:
MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 9, 1, 1000, 300, valor)
是与PLC通信的参数,用于设置。最后一个参数是我们需要写入的值,我从单元格中收集
代码是Excel2002中的VBA
谢谢 试试这个
For tt = 1 To 5
valor(1) = Val(Cells(1, 4).Value)
valor(2) = Val(Cells(2, 4).Value)
valor(3) = Val(Cells(3, 4).Value)
valor(4) = Val(Cells(4, 4).Value)
valor(5) = Val(Cells(5, 4).Value)
Select Case valor(tt)
Case valor(1)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 5, 1, 1000, 300, valor)
Case valor(2)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 6, 1, 1000, 300, valor)
Case valor(3)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 7, 1, 1000, 300, valor)
Case valor(4)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 8, 1, 1000, 300, valor)
Case valor(5)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 9, 1, 1000, 300, valor)
End Select
Next tt
正如cboden指出的,select语句在for循环之外。您不应该实现select语句,而应该这样做(阅读本文的其余部分以了解解释):
说明:
For tt = 1 To 5
valor = Val(Cells(tt, 4).Value)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 4+tt, 1, 1000, 300, valor)
Next tt
请记住,for循环将为tt(1,2,3,4,5)的每个值运行一次循环内的所有代码,这意味着:
For tt = 1 To 5
valor(1) = Val(Cells(1, 4).Value)
valor(2) = Val(Cells(2, 4).Value)
valor(3) = Val(Cells(3, 4).Value)
valor(4) = Val(Cells(4, 4).Value)
valor(5) = Val(Cells(5, 4).Value)
Next tt
可以(也应该)这样写:
For tt = 1 To 5
valor(tt) = Val(Cells(tt, 4).Value)
Next tt
select语句不仅是错误的,而且是不必要的。正确的版本(如果您选择将其放入for循环,我不建议这样做,因为它是冗余的,并且使代码更难阅读)是:
上述内容可缩短为:
res2=MB1.Write(“10.56.35.214”、“10.56.35.22”、502、0、16、4+tt、1、1000、300、valor(tt))
对于tt(1,2,3,4,5)的每个值,如果与valor(tt)=Val(单元格(tt,4)一起放入for循环,则值)
将形成:
For tt = 1 To 5
valor(tt) = Val(Cells(tt, 4).Value)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 4+tt, 1, 1000, 300, valor(tt))
Next tt
由于我们不需要保留valor数组,我们可以删除valor(tt)
,并用valor
替换它,从而使完成的代码:
For tt = 1 To 5
valor = Val(Cells(tt, 4).Value)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 4+tt, 1, 1000, 300, valor)
Next tt
此外,我建议您以后不要在这样的公共论坛上发布IP地址。所选案例不在for/next循环中。因此,当您达到select case时,tt的值将始终相同。还有惊喜。。。循环结束后tt将始终为6。因此,select案例将永远找不到有效的结果。
For tt = 1 To 5
valor = Val(Cells(tt, 4).Value)
res2 = MB1.Write("10.56.35.214", "10.56.35.22", 502, 0, 16, 4+tt, 1, 1000, 300, valor)
Next tt