设为首页收藏本站Access中国

Office中国论坛/Access中国论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

12下一页
返回列表 发新帖
查看: 2815|回复: 10
打印 上一主题 下一主题

[窗体] 这种导出至excel的代码怎么写呢?

[复制链接]
跳转到指定楼层
1#
发表于 2011-4-19 07:48:16 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
如图所示,我只想导出选中的这几列,列数不限,根据需要而定,那么在代码上怎么写呢?

原来“导出至excel”的代码是这样写的:

Private Sub Command11_Click()
Me.sub报废单.SetFocus

    DoCmd.GoToRecord , , acFirst
        
    DoCmd.RunCommand acCmdSelectAllRecords
    DoCmd.RunCommand acCmdCopy
  
    Dim obj As Object
    Set obj = CreateObject("excel.application")
    obj.Workbooks.Add
    obj.Visible = True
    SendKeys "^v"
    On Error Resume Next
    oApp.UserControl = True
   
End Sub

但这段代码导出的是子窗体里所有的列,我只想导出选定的几个列,代码上怎么修改呢?



本帖子中包含更多资源

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

x
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 分享淘帖 订阅订阅
2#
发表于 2011-4-19 11:19:45 | 只看该作者
为什么不参考下红尘的示例呢?
【源码示例】数据导出时只导出选中字段
3#
 楼主| 发表于 2011-4-19 12:57:30 | 只看该作者
roych 发表于 2011-4-19 11:19
为什么不参考下红尘的示例呢?
【源码示例】数据导出时只导出选中字段

你看了【源码示例】数据导出时只导出选中字段中我的回复没,在最后一页上。

主要是红尘的示例在导出到excel后,需要自己修改excel表格的格式,比如时间啊,文本数值啊等,如果是查询中0比较多的话,导出在excel中满眼都是0,这时修改的话,觉得挺麻烦。

基于上述原因,所以我才采用DoCmd.RunCommand acCmdSelectAllRecords和    DoCmd.RunCommand acCmdCopy两个命令来配合导出,以达到所见即所得的效果。
4#
发表于 2011-4-19 14:19:08 | 只看该作者
如果那样,何不直接复制粘贴到Excel?这样岂非来得还直接得多。

点击这里给我发消息

5#
发表于 2011-4-19 20:39:15 | 只看该作者
按照楼主的思路,改一下,在主窗体上建一个标签,在这个标签的单击事件中写代码:

    Dim obj As Object
    SendKeys "^c"
    Set obj = CreateObject("excel.application")
    obj.Workbooks.Add
    obj.Visible = True
    SendKeys "^v"
    On Error Resume Next
    oApp.UserControl = True


然后在子窗体中随便选择一个区域,单击主窗体上新建的标签,即可导出所选区域
6#
 楼主| 发表于 2011-4-20 07:39:19 | 只看该作者
本帖最后由 简 于 2011-4-20 07:44 编辑
t小宝 发表于 2011-4-19 20:39
按照楼主的思路,改一下,在主窗体上建一个标签,在这个标签的单击事件中写代码:

    Dim obj As Objec ...


请问oApp.UserControl = True这段代码中的oApp是什么呢,调试中说该变量未定义,我想应该是obj吧。
如果按obj来运行,调试结果是打开了excel,但东西没有粘贴上去,只有第一个单元格处于被选中的状态。
这该怎么处理呢。

点击这里给我发消息

7#
发表于 2011-4-20 09:39:23 | 只看该作者
加一句DoEvents就可以了:
    Dim obj As Object
    SendKeys "^c"
    DoEvents                                      '加上这句
    Set obj = CreateObject("excel.application")
    obj.Workbooks.Add
    obj.Visible = True
    SendKeys "^v"

也可以这样,更好一点:
    Dim obj As Object
    DoCmd.RunCommand acCmdCopy
    Set obj = CreateObject("excel.application")
    obj.Workbooks.Add
    obj.Visible = True
    obj.ActiveSheet.Paste
8#
 楼主| 发表于 2011-4-20 13:01:46 | 只看该作者
t小宝 发表于 2011-4-20 09:39
加一句DoEvents就可以了:
    Dim obj As Object
    SendKeys "^c"

以上两种方法调试都失败。

第一种方法,如果剪贴板上事先有复制,运行第一种方法后,粘贴的是剪贴板上的内容,而不是子窗体里选中的记录。

第二种方法,无论怎么复制,显示在excel中的却只有子窗体第一行第一列的数据。
9#
发表于 2011-4-20 14:07:13 | 只看该作者
怎样才能导出到指定的excel文件

点击这里给我发消息

10#
发表于 2011-4-20 15:36:17 | 只看该作者
简 发表于 2011-4-20 13:01
以上两种方法调试都失败。

第一种方法,如果剪贴板上事先有复制,运行第一种方法后,粘贴的是剪贴板上 ...

在主窗体上建一个标签,在这个标签的单击事件中写代码
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-6-27 17:13 , Processed in 0.090760 second(s), 34 queries .

Powered by Discuz! X3.3

© 2001-2017 Comsenz Inc.

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