【发布时间】: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 > Count the columns > Apply the correct Format > Paste again。这听起来并不完美,但应该可以完成工作。
如果您有更好的解决方案,请随时分享
【问题讨论】:
-
由于您复制的来源不是 excel,请尝试像这样粘贴:
ActiveSheet.Range("A1").PasteSpecial Format:="Unicode Text", Link:=False, DisplayAsIcon:=False -
哦,谢谢@jivko,这真的让我走上了正确的道路。我还没有适应并完成我的代码......稍后会回到这里:-)
-
如果您提供剪贴板中数据的示例,也许会有所帮助。