gpt4 book ai didi

vba - 组合来自 2 个单元格的字符串,添加连字符并使用 DDEPoke 发送

转载 作者:行者123 更新时间:2023-12-04 20:55:37 26 4
gpt4 key购买 nike

我正在尝试整理一个前同事创建的东西。我不是一个PC程序员。

一些背景资料:

- 该程序旨在从工作表中获取数据并将其发送到 PLC(可编程逻辑 Controller )。 Excel 工作表不对数据做任何事情。

- “Spare”这个词只是一个包含 Spare 的字符串。它不是来自程序中的任何地方。如果程序查看时单元格中没有任何内容,那么我希望程序将“备用”一词发送到 PLC。

- DDEPoke (https://msdn.microsoft.com/en-us/vba/excel-vba/articles/application-ddepoke-method-excel) 的链接。它通过先前打开的 channel (使用 DDEInitiate)发送数据。

- 在它的原始形式中,程序不会抛出任何错误。但它不会将数据写入PLC。

原程序:

    For iBit = 0 To 15
Sheets("TestPoints").Cells(3, 5) = iMod
Sheets("TestPoints").Cells(4, 5) = iBit


sWriteString = "IO_DescriptionStorage[" & iMod & "," & iBit & "]"
If Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn) = "" Then
**DDEPoke RSIchan, sWriteString, "Spare"**
Else
Value = Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn) & " - " & Sheets("TestPoints").Cells(iDeviceStartRow + iBit, iColumn)
**DDEPoke RSIchan, sWriteString, Value**
End If


Next iBit

Next iMod

我已经能够找出我用粗体突出显示的问题所在。

DDEPoke RSIchan, sWriteString, "Spare"只是在单元格为空时尝试发送字符串 "Spare"。

DDEPoke RSIchan, sWriteString, Value 正在尝试发送变量 Value 的内容。

从 Else 语句中的代码开始,通过反复试验,我发现有两种方法可以让程序发送数据,但只有 1 个单元格中的数据。

1.
 Set Value = Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn) 

DDEPoke RSIchan, sWriteString, Value

2.
DDEPoke RSIchan, sWriteString, Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn)

我想做的是合并和发送,所以我尝试了以下方法:

1.
    Set Value = Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn) & " - " & Sheets("TestPoints").Cells(iDeviceStartRow + iBit, iColumn)

DDEPoke RSIchan, sWriteString, Value

这会在尝试设置值运行时错误“13”时引发错误:类型不匹配。所以这不是使用 Set 关键字的正确方法

2.
DDEPoke RSIchan, sWriteString, Sheets("TestPoints").Cells(iIONameRowNum + iBit, iColumn) & " - " & Sheets("TestPoints").Cells(iDeviceStartRow + iBit, iColumn)

这不会引发任何错误,但不会向 PLC 写入任何内容。

我很确定这只是为 Set 关键字和/或 DDEPoke 方法正确打包数据的问题。

我想一旦我让 Else 语句中的代码工作,我就可以将它应用于 If 语句中的代码。

任何帮助表示赞赏。

谢谢

谢恩

最佳答案

做一些简单的测试,我可以得到以下的连接值:

Sub Tester()
Dim Value As Variant

Value = Sheets("Sheet1").Cells(24, 8) & " - " & Sheets("Sheet1").Cells(25, 8)

MsgBox Value
End Sub

此处根本不需要使用“Set”关键字,因为您只是将值分配给变量,而不是对象。但是,如果它不适合您,您可能会准确地说这是由于它被传递给 DDEPoke 方法的方式。

您可以尝试首先将完整连接的字符串存储在字符串变量中,然后将其分配给您的值,如下所示:
Sub Tester()
Dim str As String
Dim Value As Variant

str = Sheets("Sheet1").Cells(24, 8) & " - " & Sheets("Sheet1").Cells(25, 8)
Value = str

DDEPoke RSIchan, sWriteString, Value
End Sub

编辑:
如果 Set 关键字是关键,那么对象似乎没有“成为”它需要的样子。在您上面链接的 DDEPoke 示例中,它显示第三个参数设置为一个范围,所以我想知道您是否使用 CONCATENATE 公式在工作表中添加一列以创建您尝试发送的字符串,然后存储它。假设您的公式在 H 列中,例如:
Set Value = Sheets("Sheet1").Range("H" & rowNum)

我希望这个策略有效! :)

关于vba - 组合来自 2 个单元格的字符串,添加连字符并使用 DDEPoke 发送,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48156491/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com