我正在尝试使用DDE方法编写vba代码。该代码旨在复制excel表的一组列,并将其粘贴到EES(工程方程求解器)软件的参数表中。然后运行EES代码来解析de table,生成输出数据列。然后将此数据复制并粘贴回包含输入数据的excel文件中。
由于我是vba的新手,我使用了EES(EXCEL执行EES宏命令)提供的示例作为指导。
将数据粘贴回Excel电子表格时会出现问题:代码似乎忽略了小数点分隔符!我的excel和EES都设置为使用逗号作为小数分隔符,当我手动从EES复制结果然后粘贴到excel时,正常粘贴数字,使用逗号(excel中的数字也正确粘贴到ESS中) )。
然而,当我设置执行此任务的代码时,诸如“15,47”之类的数字被粘贴在excel中为“1,55E + 12”或“1547421377050”。代码如下所示:
Private Sub cmdDDE_Click()
Dim ChNumber As Integer
Dim myShell As String
ChNumber = -1
myShell = frmEESDDE.txtApp.Text
On Error Resume Next
'Copy selected rows into clipboard
Range("B2:G1401").Select
Selection.Copy
Shell_R = Shell(myShell, 1)
If Shell_R <> "" Then
'Initiate DDE
ChNumber = Application.DDEInitiate(app:="ees", topic:="")
If ChNumber <> -1 Then
'Open EES
Application.DDEExecute ChannelNumber, "[Open C:\EES\Tablesolve.ees]"
'Paste data
Application.DDEExecute ChannelNumber, "[Paste Parametric 'Table 1' R1 C1]"
'Solve parametrictable
Application.DDEExecute ChannelNumber, "[SOLVETABLE 'TABLE 1' Rows=1..1400]"
'Copy results
Application.DDEExecute ChannelNumber, "[COPY ParametricTable 'Table 1' R1 C7:R1400 C14]"
'Choose separators
Application.DecimalSeparator = ","
Application.ThousandsSeparator = "."
Application.UseSystemSeparators = False
'Paste results from EES into EXCEL
Application.Paste Destination:=Worksheets("Sheet1").Range("H2:O1440")
Application.UseSystemSeparators = True
'Quit EES and Terminate DDE
DDEExecute ChNumber, "QUIT"
Application.DDETerminate ChNumber
Else
MsgBox "Unable to initiate connection to EES", vbExclamation, "EES DDE"
End If
frmEESDDE.Hide
Else
MsgBox "The application, " & myShell & ", was not found", vbExclamation, "EES DDE"
End If
PS =正如您所看到的,我已尝试将小数点分隔符设置为“,”,如此链接中所示:Pasting decimal numbers in excel / comma and point decimal separator但它也不起作用!
感谢您的帮助!
答案 0 :(得分:1)
问题解决了! 我还在葡萄牙语社区发布了stackoverflow的问题并得到了一个非常有用的答案。经过一点调整,它解决了我的问题! 葡萄牙语解决方案的链接如下:
但对于那些更喜欢英文版本的人,我会尝试总结修复代码所做的工作:
1-声明范围变量:
Dim interval As Range 'represent the cells in which info was pasted
Dim Cell As Range 'to allow cell format to be changed
2-复制了esternal程序的结果并粘贴之前:
Set interval = Worksheets("Sheet1").Range("H2:O1440") 'set interval to paste the results
interval.NumberFormat = "@" 'set format to text
粘贴后的第三步:
interval.NumberFormat = "General" 'set format to general
For Each Cell In interval
Cell.Value = FormatNumber(CDbl(Cell.Value), 2) 'set only 2 decimal places
Cell.Value = CDbl(Cell.Value) 'set to double
Next
其余代码保持不变。
特别感谢Cantoni帮助解决了pt版本的问题。
答案 1 :(得分:0)
尝试仅粘贴值,而不是粘贴application.paste。即:而不是
Application.Paste Destination:=Worksheets("Sheet1").Range("H2:O1440")
使用
Range("H2:O1440").PasteSpecial xlPasteValues
如果这不起作用,请将输出解析为字符串。
答案 2 :(得分:0)
你也可以试试这个:
{{1}}