Office中国论坛/Access中国论坛

标题: 这种导出至excel的代码怎么写呢? [打印本页]

作者: 简    时间: 2011-4-19 07:48
标题: 这种导出至excel的代码怎么写呢?
如图所示,我只想导出选中的这几列,列数不限,根据需要而定,那么在代码上怎么写呢?

原来“导出至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

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

[attach]45377[/attach]


作者: roych    时间: 2011-4-19 11:19
为什么不参考下红尘的示例呢?
【源码示例】数据导出时只导出选中字段
作者: 简    时间: 2011-4-19 12:57
roych 发表于 2011-4-19 11:19
为什么不参考下红尘的示例呢?
【源码示例】数据导出时只导出选中字段

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

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

基于上述原因,所以我才采用DoCmd.RunCommand acCmdSelectAllRecords和    DoCmd.RunCommand acCmdCopy两个命令来配合导出,以达到所见即所得的效果。

作者: roych    时间: 2011-4-19 14:19
如果那样,何不直接复制粘贴到Excel?这样岂非来得还直接得多。
作者: t小宝    时间: 2011-4-19 20:39
按照楼主的思路,改一下,在主窗体上建一个标签,在这个标签的单击事件中写代码:

    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


然后在子窗体中随便选择一个区域,单击主窗体上新建的标签,即可导出所选区域

作者: 简    时间: 2011-4-20 07:39
本帖最后由 简 于 2011-4-20 07:44 编辑
t小宝 发表于 2011-4-19 20:39
按照楼主的思路,改一下,在主窗体上建一个标签,在这个标签的单击事件中写代码:

    Dim obj As Objec ...


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

作者: t小宝    时间: 2011-4-20 09:39
加一句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

作者: 简    时间: 2011-4-20 13:01
t小宝 发表于 2011-4-20 09:39
加一句DoEvents就可以了:
    Dim obj As Object
    SendKeys "^c"

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

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

第二种方法,无论怎么复制,显示在excel中的却只有子窗体第一行第一列的数据。
作者: gxy1000    时间: 2011-4-20 14:07
怎样才能导出到指定的excel文件
作者: t小宝    时间: 2011-4-20 15:36
简 发表于 2011-4-20 13:01
以上两种方法调试都失败。

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

在主窗体上建一个标签,在这个标签的单击事件中写代码
作者: todaynew    时间: 2011-4-20 20:30
简 发表于 2011-4-19 07:48
如图所示,我只想导出选中的这几列,列数不限,根据需要而定,那么在代码上怎么写呢?

原来“导出至exce ...

没什么必要,ctrl+C,ctrl+v即可,不必弄一堆代码解决一个临时性的功能。




欢迎光临 Office中国论坛/Access中国论坛 (http://www.office-cn.net/) Powered by Discuz! X3.3