【问题标题】:Excel VBA: Paste clipboard data (external source) with the appropriate cell data typeExcel VBA:使用适当的单元格数据类型粘贴剪贴板数据(外部源)
【发布时间】:2017-05-17 08:39:55
【问题描述】:

我每天多次从外部来源(其他应用程序,例如 sqlClients:Heidi、MS SQL Management Studio、内部工具……)复制表格数据(制表符分隔),并将它们粘贴到 Excel 工作表中以进行扩展分析。

我一直在努力制作一个以正确格式粘贴特定列的宏,而不是更改数据显示方式的 General 类型。

在使用paste special 仅粘贴值之前,我尝试将特定列设置为适当的数据类型:

ActiveSheet.Range("B:D,X:X").NumberFormat = "@"
ActiveSheet.Range("A1").PasteSpecial _
    Paste:=xlPasteValues _
    , Operation:=xlNone _
    , SkipBlanks:=False _
    , Transpose:=False

遗憾的是它给出了我无法解决的Run Time Error '1004' PasteSpecial method of Range class failed

接下来我尝试TextToColumns如下:

    ActiveSheet.Range("A1").Select
    ActiveSheet.Paste

    For Each cell In Selection.Cells
        If cell <> "" Then
            cell.TextToColumns _
                Destination:=cell _
                , DataType:=xlDelimited _
                , ConsecutiveDelimiter:=False _
                , Space:=False _
                , TextQualifier:=xlTextQualifierNone _
                , Tab:=True _
                , semicolon:=False _
                , comma:=False _
                , other:=False _
                , FieldInfo:=Array(Array(0, 2), Array(1, 2), Array(3, 2), Array(10, 2), Array(15, 2))
        End If
    Next

它不仅不能按预期工作(它有什么问题?),而且它似乎效率不高,因为它会在遍历每个单元格之前粘贴剪贴板内容。我的桌子可能真的很大,因此这需要很长时间!

所以,我想知道是否有更好/优雅的方法将剪贴板数据从外部源粘贴到适当的单元格数据类型中。如果没有,帮助修复上述线索也很好。

提前感谢您

Edit.1:

感谢@jivko 的评论,现在我有了一些正确的代码:

ActiveSheet.Range("A1").Select
ActiveSheet.PasteSpecial Format:="Unicode Text", Link:=False, DisplayAsIcon:=False

由于我要粘贴来自不同来源的具有不同列数的代码,我想知道在粘贴之前我怎么知道剪贴板中有多少列,以便我可以预先应用适当的格式?

一个想法是Paste &gt; Count the columns &gt; Apply the correct Format &gt; Paste again。这听起来并不完美,但应该可以完成工作。

如果您有更好的解决方案,请随时分享

【问题讨论】:

  • 由于您复制的来源不是 excel,请尝试像这样粘贴:ActiveSheet.Range("A1").PasteSpecial Format:="Unicode Text", Link:=False, DisplayAsIcon:=False
  • 哦,谢谢@jivko,这真的让我走上了正确的道路。我还没有适应并完成我的代码......稍后会回到这里:-)
  • 如果您提供剪贴板中数据的示例,也许会有所帮助。

标签: vba excel paste


【解决方案1】:

我使用宏来粘贴我的数据,并在开头附近插入了这段代码。它可以防止双引号(在条目的开头)成为问题。

'此部分通过指定 TextQualifier:=xlNone: 来防止任何特殊字符干扰粘贴:

Range("A1").Select
ActiveCell.FormulaR1C1 = "abc"
Selection.TextToColumns Destination:=Range("A1"), DataType:=xlDelimited, _
    TextQualifier:=xlNone, ConsecutiveDelimiter:=False, Tab:=True, Semicolon _
    :=False, Comma:=False, Space:=False, Other:=False, FieldInfo:=Array(1, _
    1), TrailingMinusNumbers:=True
Range("A1").Select
Selection.ClearContents

'结束部分

【讨论】:

    猜你喜欢
    • 2015-07-29
    • 1970-01-01
    • 1970-01-01
    • 2016-08-05
    • 1970-01-01
    • 2015-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多