ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 6415|回复: 10

[讨论] 关于VSTO中PasteSpecial 方法的问题~~~

[复制链接]

TA的精华主题

TA的得分主题

发表于 2013-2-21 17:49 | 显示全部楼层 |阅读模式
很蛋疼,最近在弄VSTO,本人用的是VS2010的专业版,现在如下代码,是关于工作簿之关复制与粘贴的:

[code=vb]Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim wa As New Excel.Application
        Dim wbname As String = InputBox("请输入新创建的模板的名称")
        Dim wb As Excel.Workbook = wa.Workbooks.Add()
        Dim ws As Excel.Worksheet = wb.Worksheets(1)
        ws.Name = "报价清单"
        Globals.Sheet2.Application.Selection.copy()
        ws.Range("C1").PasteSpecial(Excel.XlPasteType.xlPasteFormulasAndNumberFormats, Excel.XlPasteSpecialOperation.xlPasteSpecialOperationNone, , )
        wb.SaveAs("D:\price\template\" & wbname & ".xlsx")
        wb.Close()
        Call 模板目录_初始化()
    End Sub[/code]


关于PasteSpecial 方法的参数,有这样几项:
xlPasteAll
xlPasteAllExceptBorders
xlPasteColumnWidths
xlPasteComments
xlPasteFormats
xlPasteFormulas
xlPasteFormulasAndNumberFormats
xlPasteValidation
xlPasteValues
xlPasteValuesAndNumberFormats



现在,我是想将格式和公式一并复制到新表,然后保存的。

可问题是:每一个我都试过了,没有一个是将公式和格式一并复制粘贴的(我在VBA下是可以将公式和格式一并复制粘贴的)。

请看我试的每一个的结果:

xlPasteAll  :复制结果得到图片。
xlPasteAllExceptBorders  :复制结果得到数值
xlPasteColumnWidths  :得到部分公式,格式不全。。。。。。。。
xlPasteComments  :值
xlPasteFormats   :值
xlPasteFormulas   :图片
xlPasteFormulasAndNumberFormats   :值
xlPasteValidation   :值
xlPasteValues   :值
xlPasteValuesAndNumberFormats     :值



我完全弄不明白这样的结果是怎么回事,大家可以试下同样的操作,看得到什么样的结果。
还是说是我的代码有问题???或者是设计有问题???

TA的精华主题

TA的得分主题

发表于 2013-2-22 11:52 | 显示全部楼层

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-23 13:08 | 显示全部楼层

求解跨工作簿的pastespecial方法的参数

各位大哥,不知道你们有没有用过vs2010的excel的range(),复制与粘贴。


当我在同一个工作簿中,sheet1中的区域复制,然后粘贴到sheet2中的区域时,用的是xlPasteAll ,完全没有问题,无论公式还是格式,还是数值,都没有问题的。


当我用vsto新建一个工作簿,Dim wb As Excel.Workbook = wa.Workbooks.Add()
然后,在我当前操作的工作簿中的sheet1中将区域复制,然后粘贴到刚刚新建的工作簿wb中的其中一个文档,然后保存到指定位置。得到的结果却是一张图片。。。。(用的也是xlPasteAll )。。。。

请教一下。。这到底是什么原因呢??

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-23 12:48 | 显示全部楼层
tet208 发表于 2013-2-22 11:52
学学英文吧....很清楚的!

这个我懂,问题是得到的结果与描述的完全不同,比如xlPasteAll  完全粘贴,如果我从同一人工作簿中的sheet1复制,粘贴到sheet2上的话,这是完全没有问题的,无论格式还是公式都没有问题,但是,当我从workbook1中的sheet1中复制,然后粘贴到workbooks.add()打开的sheet1里面时,得到的结果就只是一张图片了,不信你试试。

TA的精华主题

TA的得分主题

发表于 2013-2-23 14:36 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 wpxxsyzx 于 2013-2-23 14:39 编辑

短消息收到
没有出现图片
Globals.Sheet2.Application.Selection.copy()
看看vba里selection的帮助
如果要复制当前选择就Application.Selection.copy()
如果要复制指定的内容就Globals.表名.单元格区域.copy()

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-25 10:24 | 显示全部楼层
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
wpxxsyzx 发表于 2013-2-23 14:36
短消息收到
没有出现图片
Globals.Sheet2.Application.Selection.copy()
  1. Private Sub 按钮_创建_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles 创建.Click

  2.         Dim wstarget As Excel.Worksheet = Globals.ThisAddIn.Application.ActiveWorkbook.ActiveSheet

  3.         Dim wbname As String = InputBox("请输入新创建的模板的名称")
  4.         Dim wa As New Excel.Application
  5.         Dim wb As Excel.Workbook = wa.Workbooks.Add()
  6.         Dim ws As Excel.Worksheet = wb.Worksheets.Item(1)

  7.         wstarget.Range("P12").Copy()
  8.         ws.Range("A1").PasteSpecial()
  9.         wb.SaveAs("D:\price\template" & wbname)
  10.         wb.Close()
  11.         wa.Quit()
  12.         Call 模板目录_初始化()
  13.     End Sub
复制代码
这个是我用vs2010专业版弄的excel插件(addin)中的一个按钮代码。

得到的结果如下图。。。。

C:\Documents and Settings\Administrator\桌面\未命名.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-25 10:26 | 显示全部楼层
wpxxsyzx 发表于 2013-2-23 14:36
短消息收到
没有出现图片
Globals.Sheet2.Application.Selection.copy()

未命名.jpg

TA的精华主题

TA的得分主题

 楼主| 发表于 2013-2-25 10:29 | 显示全部楼层
wpxxsyzx 发表于 2013-2-23 14:36
短消息收到
没有出现图片
Globals.Sheet2.Application.Selection.copy()

复制之前是这个样子的:
未命名.jpg

TA的精华主题

TA的得分主题

发表于 2013-2-25 17:04 | 显示全部楼层
你先复制一下工作表,再删除数据,再拷贝数据{:soso_e120:}

TA的精华主题

TA的得分主题

发表于 2013-3-9 20:03 | 显示全部楼层
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-5-8 22:52 , Processed in 0.038221 second(s), 11 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表