VB编译器无法识别xlPasteValues 如何实现Excel仅粘贴值功能?
问题解决方案
报错BC30451是因为
xlPasteValues是Microsoft.Office.Interop.Excel.XlPasteType枚举下的成员,不能直接单独使用,必须指定所属的枚举类型。
方案1:直接使用完全限定的枚举值(无需修改其他代码)
把报错行的xlPasteValues替换为完整的枚举路径即可,修改后的代码行:
xlWorkSheetDestination.Range("A1").PasteSpecial(Microsoft.Office.Interop.Excel.XlPasteType.xlPasteValues)
方案2:简化命名空间引用(适合多次调用Excel对象的场景)
在代码文件的最顶部添加命名空间别名声明:
Imports Excel = Microsoft.Office.Interop.Excel
之后报错行就可以简化为:
xlWorkSheetDestination.Range("A1").PasteSpecial(Excel.XlPasteType.xlPasteValues)
方案3:无需剪贴板的更高效实现(推荐)
复制粘贴依赖系统剪贴板,性能低还容易受其他程序影响,你可以直接对两个区域的Value属性赋值实现仅粘贴值的效果,完全不需要调用Copy和PasteSpecial方法:
' 省略你之前定义xlRange1的代码 Dim targetRange = xlWorkSheetDestination.Range("A1").Resize(xlRange1.Rows.Count, xlRange1.Columns.Count) targetRange.Value = xlRange1.Value
这个方法执行速度更快,也不会修改用户剪贴板的原有内容。
补充注意
你当前的代码没有释放Excel COM对象,运行后会导致Excel进程残留在系统后台,建议在关闭工作簿、退出Excel应用后补充释放逻辑:
System.Runtime.InteropServices.Marshal.ReleaseComObject(xlRange1) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheetSource) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkSheetDestination) System.Runtime.InteropServices.Marshal.ReleaseComObject(xlWorkbook) xlApp.Quit() System.Runtime.InteropServices.Marshal.ReleaseComObject(xlApp)
内容的提问来源于stack exchange,提问作者aekbj
相关产品推荐
相关产品推荐

