Excel VBA清空剪贴板后粘贴仍显示原有全部行数据如何解决
问题原因
- Excel复制单元格区域时,会在剪贴板中同时存储多种格式的数据(包括原生单元格对象格式、RTF、HTML、纯文本等)
- 你用到的三种清空剪贴板的方法,仅清除了纯文本格式的剪贴板内容,Excel内部留存的单元格复制缓存没有被完全清除
- 调用
Range.PasteSpecial方法时,Excel会优先匹配使用原生单元格格式的剪贴板内容,而不是你后续存入的纯文本第一行内容,所以就出现了粘贴出所有原始行的问题
解决方法
方案1(推荐,完全避开剪贴板冲突)
直接把读取到的第一行内容拆分写入目标单元格,不需要再走剪贴板粘贴流程,代码更稳定,替换你代码末尾4行剪贴板+粘贴的代码即可:
Dim arr As Variant ' 如果导出的csv是逗号分隔,就把vbTab换成逗号 arr = Split(strIn, vbTab) Sheets("Results").Range("A1").Resize(1, UBound(arr) + 1).Value = arr
方案2(必须使用剪贴板粘贴的场景)
清空剪贴板时额外重置Excel内部复制缓存,粘贴时指定使用文本格式:
' 在ClearClipboard调用后补充以下代码重置复制缓存 Application.CutCopyMode = xlCopy Application.CutCopyMode = False ' 粘贴部分替换为以下代码 Sheets("Results").Range("A1").Select ActiveSheet.PasteSpecial Format:="文本", Link:=False, DisplayAsIcon:=False
内容的提问来源于stack exchange,提问作者mixer
相关产品推荐
相关产品推荐

