首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何将循环编程到VBA上的DDEPoke调用中?

如何将循环编程到VBA上的DDEPoke调用中?
EN

Stack Overflow用户
提问于 2015-11-24 18:46:31
回答 1查看 1.4K关注 0票数 0

我正在尝试将一个循环编程到一个DDEPoke调用中,这个函数是由VBA支持的,称为OPC。这将使我能够从excel电子表格写入PLC (RSLogix 500)数据库。

这是代码:

代码语言:javascript
运行
复制
Private Function Open_RsLinx()

On Error Resume Next
Open_RsLinx = DDEInitiate(RsLinx, C1)

If Err.Number <> 0 Then
    MsgBox "Error Connecting to topic", vbExclamation, "Error"
    OpenRSLinx = 0 'Return false if there was an error
End If


End Function

Sub CommandButton1_Click()

RsLinx = Open_RsLinx()
For i = 0 To 255

    DDEPoke RsLinx, "N16:0", Cells(1 + i, 2)

Next i
DDETerminate RsLinx

End Sub

如果与OPC服务器建立了链接(在本例中是通过RSLinx),则此代码可以工作,并将向PLC写入数据。

问题是,我无法让部分DDEPoke RsLinx, "N16:0", Cells(1 + i, 2)按顺序将数据从一个excel单元写入到PLC数据数组的一个元素。

我试着做DDEPoke RsLinx, "N16:i", Cells(1 + i, 2)DDEPoke RsLinx, "N16:0+i", Cells(1 + i, 2),但是两者都没有效果,程序根本没有写任何东西。

如何设置代码以使N16:0一直递增到N16:255,然后停止?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-11-24 18:52:44

将变量i从字符串中断开。但是,要注意隐式类型转换,但取决于哪种类型转换(Str()或CStr()),您将得到一个前导空间。因此,转换数字Str(i),然后用Trim()包装以确保没有额外的空格,并将结果连接回"N“字符串:

代码语言:javascript
运行
复制
RsLinx = Open_RsLinx()
For i = 0 To 255

    DDEPoke RsLinx, "N16:" & Trim(Str(i)), Cells(1 + i, 2)

Next i

i在字符串中不能工作的原因是,在VBA中,一组引号中的任何内容都被认为是文字字符串。与其他一些语言不同(想到的是PHP),在这样的字符串中可以解析变量,VBA必须将变量连接在一起。请考虑以下几点:

代码语言:javascript
运行
复制
Dim s As String
s = "world"
Debug.Print "Hello s!"

这会将Hello s!的文字输出到即时窗口,因为s不是作为变量,而是作为文字字符串的一部分。正确的方法是通过连接:

代码语言:javascript
运行
复制
Dim s As String
s = "world"
Debug.Print "Hello " & s & "!"

这会将预期的Hello World!输出到即时窗口,因为s现在被视为变量,并被解析和连接。

如果不是这样,可能很难处理以下问题:

代码语言:javascript
运行
复制
Dim i As Integer
For i = 0 to 9
  Debug.Print "this" & i
Next i  

这样你就可以:

代码语言:javascript
运行
复制
th0s0
th1s1
th2s2
th3s3
th4s4
'etc

在很多情况下这会让事情变得很难处理。

尽管如此,还是有一些语言--尤其是PHP --在使用特定的引号集( ""'' --我不记得是哪一种)时,实际上在将变量嵌入字符串本身时会解析变量:

代码语言:javascript
运行
复制
$i = 5;
echo "this is number $i";

VBA没有此特性。

希望能帮上忙..。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/33902862

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档