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如下:
但是对于那些更喜欢英文版的人,我会试着总结一下修正代码的方法:
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的版本。