设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

返回列表 发新帖
查看: 2074|回复: 9
打印 上一主题 下一主题

[窗体] access里如何调用excel里的格式刷PasteSpecial?

[复制链接]
跳转到指定楼层
1#
发表于 2012-5-17 22:54:21 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
我在excel里设计了样板表,样板表的第三行是我设计好的格式。当我从access里导出数据到这个样板表时,通过对样板表的第三行点击格式刷,然后导出的数据进行格式刷操作。

我查到excel里的格式刷是PasteSpecial,但在access里如何调用呢。

还有,我在excel里复制,粘贴时只粘贴公式或值,这时在access里代码又怎么写呢。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
 楼主| 发表于 2012-5-18 11:54:39 | 只看该作者
我在excel录制的宏,其操作代码如下:

    Rows("2:2").Select
    Selection.Copy
    Rows("3:20").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Application.CutCopyMode = False
    Range("Q2:T2").Select
    Selection.AutoFill Destination:=Range("Q2:T20"), Type:=xlFillDefault
    Range("Q2:T20").Select

应该怎么修改,才能在access里使用呢。
3#
发表于 2012-5-18 12:12:28 | 只看该作者
皆无必要。
直接设计好Excel表的样式和公式,只向其填空处导入数据即可。
4#
 楼主| 发表于 2012-5-18 13:03:15 | 只看该作者
todaynew 发表于 2012-5-18 12:12
皆无必要。
直接设计好Excel表的样式和公式,只向其填空处导入数据即可。

我原先就是先设计好样板表,然后从access导出数据到样板表时,采用插入复制粘贴的方式,由于是逐条记录操作,运行速度慢,因为每个月的记录成千上万,还有电脑比较老,又只有256M的内存,采用这种方式经常死机。

后来我就采用CopyFromRecordset来导出,速度提快了,但是需要重新排版,设置格式公式等。所以我就先在excel表中的第2行设置好样式公式,然后用格式刷和拖动的方式来处理排版。我需要在access里运行excel中的格式刷,不知代码如何写。

5#
发表于 2012-5-18 14:23:07 | 只看该作者
简 发表于 2012-5-18 13:03
我原先就是先设计好样板表,然后从access导出数据到样板表时,采用插入复制粘贴的方式,由于是逐条记录操 ...

老板省钱,你就别给他省时间。当他认识到时间就是金钱的时候,设备也就更新了。
6#
发表于 2012-5-18 15:09:43 | 只看该作者
只有256M的内存?什么年代了,别人电脑的内存快256G了。
7#
发表于 2012-5-18 21:14:17 | 只看该作者
简 发表于 2012-5-18 13:03
我原先就是先设计好样板表,然后从access导出数据到样板表时,采用插入复制粘贴的方式,由于是逐条记录操 ...

其实这样的问题有几种解决办法:
1、设置模板表格。把数据导出后,将结果引用到模板中,例如:=sheet1!A2
2、创建Excel模板(xlt),把数据导出到模板文件中。
3、导出数据,然后创建Excel组件,格式化工作表。
4、估计就是你所说的那个办法了。
还是先把你的宏改成Access里可用的吧。
  1. Sub test()
  2. '需引用Excel库。否则就得创建Excel组件(CreateObject)。
  3. Dim wb As Workbook
  4. Dim ws As Worksheet
  5. Set wb = Workbooks.Open(CurrentProject.Path & "\Pra_Postion.xls")
  6. '这一句很重要,将目标表转为活动工作表(也可以用Activate方法)。
  7.     wb.Sheets("test").Select
  8. Set ws = wb.ActiveSheet
  9. ws.Rows("2:2").Select
  10.     Selection.Copy
  11.   ws.Rows("3:20").Select
  12.     Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
  13.     SkipBlanks:=False, Transpose:=False
  14. ws.Range("Q2:T2").Select
  15.     Selection.AutoFill Destination:=Range("Q2:T20"), Type:=xlFillDefault
  16. ws.Range("Q2:T20").Select
  17. '保存后关闭工作表。
  18. wb.Save
  19. wb.Close
  20. End Sub
复制代码
8#
 楼主| 发表于 2012-5-18 21:48:25 | 只看该作者
roych 发表于 2012-5-18 21:14
其实这样的问题有几种解决办法:
1、设置模板表格。把数据导出后,将结果引用到模板中,例如:=sheet1!A ...

首先说明,我的记录数成千上万,但数量不是固定的;另外,格式里带有公式,并不仅仅是简单的格式。
所以我觉得你提的第1种和第2种方法,似乎都不适用。当然也可能是因为我没有接触到这方面的例子,不知如何解决。

你给我的代码我运行了,在以下代码处卡起,

Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

这段代码无法运行,我把Selection.PasteSpecial 改为ws.Selection.PasteSpecial ,结果在Paste:=xlPasteFormats又无法运行,提示编译错误,变量未定义。我不知如何修改了。

还有引用excel的格式刷之类的,要引用什么控件之类的不?
9#
 楼主| 发表于 2012-5-18 21:51:58 | 只看该作者
还出现一个错误提示,即错误1004,类Range的PasteSpecial无效引用。
10#
发表于 2012-5-19 07:54:10 | 只看该作者
简 发表于 2012-5-18 21:51
还出现一个错误提示,即错误1004,类Range的PasteSpecial无效引用。

奇了怪了。。。。我运行可是没问题的啊。除非自动填充列存在合并单元格(粘贴格式部分则不会)。附件供参考:

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册

x
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|站长邮箱|小黑屋|手机版|Office中国/Access中国 ( 粤ICP备10043721号-1 )  

GMT+8, 2024-5-14 21:44 , Processed in 0.246438 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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