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

我正在尝试使用DDE方法编写vba代码。 该代码旨在复制Excel表格的一组列并将其粘贴到EES(工程方程式求解器)软件中的参数表中。 然后运行EES代码来parsing表格,生成输出数据列。 然后将这些数据复制并粘贴到包含input数据的Excel文件中。

由于我是vba的新手,我已经使用了EES(EXCEL执行EESmacros命令)提供的示例作为指导。

在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 =正如你可以看到我已经试图设置小数点分隔符“,”build议在这个链接: 在excel /逗号和点十进制分隔符粘贴十进制数,但它也没有工作!

我感谢您的帮助!

而不是粘贴application.paste,只尝试粘贴值。 即:而不是

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

使用

 Range("H2:O1440").PasteSpecial xlPasteValues 

如果这不起作用,请将输出parsing为string。

你也可以试试这个:

 Worksheets("Sheet1").Range("H2").PasteSpecial xlPasteValuesAndNumberFormats 

问题解决了! 我也把这个问题发布在了stackoverflow的葡萄牙语社区,并得到了一个非常有用的答案。 经过一些调整,解决了我的问题! 链接到葡萄牙的解决scheme如下:

https://pt.stackoverflow.com/questions/74860/vba-excel-n%C3%A3o-reconhece-v%C3%ADrgula-de-dados-externos

但是对于那些更喜欢英文版的人,我会试着总结一下修正代码的方法:

1-声明范围variables:

 Dim interval As Range 'represent the cells in which info was pasted Dim Cell As Range 'to allow cell format to be changed 

2-在复制从外部程序和粘贴之前的结果之后:

 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 

其余的代码保持原样。

特别感谢广西谁帮助在解决scheme的版本。