Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Excel VBA:使用适当的单元格数据类型粘贴剪贴板数据(外部源)_Vba_Excel_Paste - Fatal编程技术网

Excel VBA:使用适当的单元格数据类型粘贴剪贴板数据(外部源)

Excel VBA:使用适当的单元格数据类型粘贴剪贴板数据(外部源),vba,excel,paste,Vba,Excel,Paste,我每天多次从外部源(其他应用程序,如SQLClient:Heidi、MS SQL Management Studio、inhouse tools等)复制表数据(以制表符分隔),并将它们粘贴到Excel表格中进行扩展分析 我一直在努力制作一个以正确格式粘贴特定列的宏,而不是改变数据显示方式的General类型 首先,我尝试将特定列设置为适当的数据类型,然后使用paste special仅粘贴值: ActiveSheet.Range("B:D,X:X").NumberFormat = "@" Act

我每天多次从外部源(其他应用程序,如SQLClient:Heidi、MS SQL Management Studio、inhouse tools等)复制表数据(以制表符分隔),并将它们粘贴到Excel表格中进行扩展分析

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

首先,我尝试将特定列设置为适当的数据类型,然后使用
paste special
仅粘贴值:

ActiveSheet.Range("B:D,X:X").NumberFormat = "@"
ActiveSheet.Range("A1").PasteSpecial _
    Paste:=xlPasteValues _
    , Operation:=xlNone _
    , SkipBlanks:=False _
    , Transpose:=False
遗憾的是,它给出了运行时错误“1004”,Range类的特殊方法失败了,我无法解决这个问题

接下来我尝试了
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
由于我粘贴的代码来源不同,列数也不同,因此我想知道在粘贴之前,我如何知道剪贴板中有多少列,以便事先应用适当的格式

一个想法是
粘贴>计算列数>应用正确的格式>再次粘贴
。这听起来并不完美,但应该能完成任务


如果您有更好的解决方案,请随时共享我使用宏粘贴数据,并且我在开始处插入了此代码。它可以防止双引号(在条目的开头)成为问题

'此部分通过指定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

'结束部分

由于您复制的源代码不是excel,请尝试如下粘贴:
ActiveSheet.Range(“A1”)。粘贴特殊格式:=“Unicode文本”,Link:=False,DisplayAsIcon:=False
噢,谢谢@jivko,这确实让我走上了正确的道路。我还没有适应并完成我的代码。。。稍后将回到这里:-)如果您给出剪贴板中数据的示例,可能会有所帮助。
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