VBA-excel在粘贴外部数据时忽略逗号

VBA-excel在粘贴外部数据时忽略逗号,vba,excel,Vba,Excel,我正在尝试使用DDE方法编写vba代码。该代码旨在复制excel表格的一组列,并将其粘贴到EES(工程方程求解器)软件的参数表中。然后运行EES代码求解de表,生成输出数据列。然后将该数据复制并粘贴回包含输入数据的excel文件中 因为我是vba新手,所以我使用了EES(从EXCEL执行EES宏命令)提供的示例作为指导 将数据粘贴回excel电子表格时会出现问题:代码似乎忽略了十进制分隔符!我的excel和EES都设置为使用逗号作为小数点分隔符,当我手动复制EES的结果并粘贴到excel时,数字

我正在尝试使用DDE方法编写vba代码。该代码旨在复制excel表格的一组列,并将其粘贴到EES(工程方程求解器)软件的参数表中。然后运行EES代码求解de表,生成输出数据列。然后将该数据复制并粘贴回包含输入数据的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
Private Sub cmdDDE_Click()
Dim ChNumber作为整数
像绳子一样模糊
ChNumber=-1
myShell=frmEESDDE.txtApp.Text
出错时继续下一步
'将选定行复制到剪贴板
范围(“B2:G1401”)。选择
选择,复制
Shell\u R=Shell(myShell,1)
如果Shell_R“”那么
“启动DDE
ChNumber=Application.DDEInitiate(应用程序:=“ees”,主题:=”)
如果ChNumber-1,则
“开放式EES
Application.DDEExecute ChannelNumber,“[Open C:\EES\Tablesolve.EES]”
'粘贴数据
Application.DDEExecute ChannelNumber,“[粘贴参数'表1'R1 C1]”
'求解参数表
Application.DDEExecute ChannelNumber,“[SOLVETABLE'表1'行=1..1400]”
“复制结果
Application.DDEExecute ChannelNumber,“[复制参数表'表1'R1 C7:R1400 C14]”
“选择分离器
Application.DecimalSeparator=“,”
Application.ThousandsSeparator=“”
Application.UseSystemSeparators=False
'将EES中的结果粘贴到EXCEL中
应用程序.粘贴目的地:=工作表(“Sheet1”).范围(“H2:O1440”)
Application.UseSystemSeparators=True
'退出EES并终止DDE
DDEChnumber,“退出”
Application.ddechnumber
其他的
MsgBox“无法启动到EES的连接”,VBE感叹号,“EES DDE”
如果结束
藏起来
其他的
MsgBox“找不到应用程序,&myShell&”,VBEQUOTE,“EES DDE”
如果结束
PS=正如您所看到的,我已经尝试将十进制分隔符设置为“”,正如在这个链接中所建议的那样:但它也不起作用


我感谢你的帮助

不要使用application.paste粘贴,而是尝试仅粘贴值。ie:而不是

Application.Paste Destination:=Worksheets("Sheet1").Range("H2:O1440")
使用

如果不起作用,请将输出解析为字符串。

您也可以尝试以下方法:

Worksheets("Sheet1").Range("H2").PasteSpecial xlPasteValuesAndNumberFormats
问题解决了! 我也在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
3-粘贴后:

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版本中帮助解决了此问题。

Hi user3476534,我曾尝试使用您建议的命令,但不幸的是,该命令无效。在这种情况下,我没有得到没有逗号的值,而是什么也没有得到,即单元格保持空白。。。我还试图添加工作表(“Sheet1”),但仍然没有结果!我使用了:
工作表(“Sheet1”)。范围(“H2:O1440”)。粘贴特殊xlPasteValues
嘿,尼古拉斯!我试着使用你建议的命令,但是没有得到错误的数字,我只是得到了空白单元格,这很奇怪。。。正如我所说,这是我第一次使用vba,所以我真的不知道这个命令行出了什么问题!无论如何,我感谢你的帮助。同样的事情。。。还是空白。非常感谢!!效果非常好。我只使用了:
interval.NumberFormat=“@”将格式设置为text
,然后
“我粘贴了我的代码”
,最后我使用了:
interval.NumberFormat=“General”将格式设置为General
,以保留带有
值的复制粘贴值。
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