Excel VBA:使用适当的单元格数据类型粘贴剪贴板数据(外部源)
我每天多次从外部源(其他应用程序,如SQLClient:Heidi、MS SQL Management Studio、inhouse tools等)复制表数据(以制表符分隔),并将它们粘贴到Excel表格中进行扩展分析 我一直在努力制作一个以正确格式粘贴特定列的宏,而不是改变数据显示方式的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
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