【问题标题】:VBA - excel neglects comma when pasting external dataVBA - 粘贴外部数据时excel忽略逗号
【发布时间】:2015-10-04 23:03:50
【问题描述】:

我正在尝试使用 DDE 方法编写 vba 代码。该代码旨在复制 Excel 表的一组列,并将其粘贴到 EES(工程方程求解器)软件的参数表中。然后运行 ​​EES 代码来解表,生成输出数据列。然后将此数据复制并粘贴回包含输入数据的 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,但它也不起作用!

感谢您的帮助!

【问题讨论】:

    标签: vba excel


    【解决方案1】:

    问题解决了! 我还在 stackoverflow 的葡萄牙语社区发布了这个问题,并得到了非常有用的答案。稍加调整就解决了我的问题! 葡萄牙语解决方案的链接如下:

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

    但是对于那些更喜欢英文版的人,我会尝试总结一下修复代码所做的工作:

    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 版本的问题。

    【讨论】:

    • 非常感谢!!效果真的很好。我只使用了:interval.NumberFormat = "@" 'set format to text,然后是 "I pasted my code",最后一次使用:interval.NumberFormat = "General" 'set format to general 来保留带有 ., 值的复制粘贴值。
    【解决方案2】:

    你也可以试试这个:

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

    【讨论】:

    • 嘿尼古拉斯!我尝试使用您建议的命令,但是我没有得到错误的数字,而是得到了空白单元格,这很奇怪......正如我所说,这是我第一次使用 vba,所以我真的不知道这个命令行可能出了什么问题!无论如何,我感谢您的帮助。
    • 同样的事情...还​​是空白。
    【解决方案3】:

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

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

    使用

    Range("H2:O1440").PasteSpecial xlPasteValues
    

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

    【讨论】:

    • 您好 user3476534,我尝试使用您建议的命令,但不幸的是它不起作用。在这种情况下,我没有得到没有逗号的值,即单元格保持空白......我还尝试向其中添加 Worksheets("Sheet1") 但它仍然没有给我任何结果!我用过:Worksheets("Sheet1").Range("H2:O1440").PasteSpecial xlPasteValues
    猜你喜欢
    • 1970-01-01
    • 2018-09-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-29
    • 2013-12-27
    • 1970-01-01
    相关资源
    最近更新 更多