VB Excel的PasteSpecial需要剪贴板内容?

我有一个问题与VB PasteSpecial。
此代码在Excel中完美工作(假设您已经select了包含数据的单元格)

Selection.Copy Range("A1").Select Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _ False, Transpose:=True Application.CutCopyMode = False 

但是,我正在使用第三方软件(QlikView)来提取数据,然后将其复制到Excel文档中。 正常粘贴没有问题,但必须进行换位。

显然,因为我没有任何内容在工作簿中复制,所以我不使用

 Selection.Copy 

但是因为我不首先复制文档中的任何内容(即使在复制内存中有表格数据),这个调用返回的是一个糟糕的参数exception(如果我先复制那个VERY工作簿中的单元格然后调用macros转置它)。

运行时错误“1004”返回。 Range类的PasteSpecial方法失败。

是的,我可以将它粘贴到文档中,然后将其从该区域剪下,将其移到正确的位置并进行转置,但这是错误的编码。

有没有人经历过这个,并有办法让这个工作?

您无法使用PasteSpecial转换数据的原因是由于数据在从QlikView中复制后存在于剪贴板中而造成的。

当您从QlikView表中复制数据(我假设您从中复制)时,它将以三种格式将其复制到剪贴板:HTML,Unicode和标准(代码分页)文本:

剪贴板查看器的屏幕截图,显示QlikView复制到剪贴板的不同格式

将其与Excel的剪贴板格式进行比较:

剪贴板查看器的屏幕截图,显示Excel复制到剪贴板的不同格式

如您所见,在Excel中复制数据时,它将数据以自己的格式存储在剪贴板中,因此知道如何根据需要转置单元格。 对于QlikView,剪贴板只包含纯文本,因此Excel不知道如何转置此,因此PasteSpecial调用失败。

如果您是从QlikView中的表格复制到Excel,那么如果可以在QlikView中使用“数据透视表”图表(因为您可以根据需要拖动列和行),我build议您已经在QlikView中执行转置。 否则,您将不得不使用Siddharth的代码并在Excel中转​​置它。

你将不得不使用上面提到的方法。 你也可以试试这个

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

但是你将不得不复制一遍并转置它。 换句话说,没有直接的方法可以调换它。