(目前使用Access 2003)在我的项目中,我有一个子表单frmSub,它保存查询的结果,位于表单(frmMain)中。 frmSub是一个子窗体控件,它包含一个查询而不是一个窗体(它的SourceObject属性设置为“Query.qrySearch”)
使用各种运行时计数器,查询会在顶部按“最佳”排序结果。然后,用户可以手动选择他们需要的结果,或者获取所有结果。
我想要做的是提供一种在Excel中打开结果的方法(如果没有选择,则用户选择或所有结果)。忽略现在可能更常用的'create temp export .xls file'方法,我现在正在寻找一种复制/粘贴方法,模仿用户当前使用的ctl-C / V方式。 我在frmMain中放置了一个“在Excel中打开”按钮。
在frmSub的Exit事件中,我查看.SelHeight,如果做出选择则返回> 0
If Me.frmSub.Form.SelHeight > 0 Then
DoCmd.RunCommand acCmdCopy
Else:
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy
End If
在frmMain的'在Excel中打开'按钮后面我有...
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Workbooks.Add
.ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
.Cells.Select
.Cells.EntireColumn.AutoFit
.Visible = True
.Range("a1").Select
End With
Set xlApp = Nothing
Call EmptyClipboard
调用EmptyClipboard调用基于api的例程来清除剪贴板。 虽然我意识到以这种方式使用剪贴板可能不是最佳实践,但我不确定如果能够确定合理用途,那么这种想法是否是普遍的(预计用户在这里不会特别不利)
问题 虽然上述方法运行良好但是使用Exit事件存在问题,因为它不仅会在单击“退出到Excel”按钮时触发 - 而且如果剪贴板为空,则导出到Excel会导致问题。
有没有办法确定是否是“退出到Excel”按钮启动子表单的Exit事件 - 并将其记录在Exit事件的代码中?我似乎在frmSub中可以访问的唯一事件是On Exit和On Enter。
如果任何复制/粘贴方法可能仍有问题,那么我可以查看导出到tmp .xls文件。
答案 0 :(得分:0)
有了更多的时间来研究这个问题,我认为,我已经重新安排了一些事情。特别是,Exit事件现在仅用于存储数据表的选择参数,从而将复制阶段转移到“导出到Excel”按钮......
frmSub退出事件包括......
tmpSelHeight = Me.frmSub.Form.SelHeight
tmpSelTop = Me.frmSub.Form.SelTop
tmpSelLeft = Me.frmSub.Form.SelLeft
tmpSelWidth = Me.frmSub.Form.SelWidth
在frmMain上的“在Excel中打开”按钮后面,现在包括......
If IsProcessRunning("excel.exe") Then
If MsgBox("Excel is currently running: click Yes to view in new Excel instance", vbYesNo, "") = vbNo Then Exit Sub
End If
If tmpSelHeight > 0 Then
Form! frmSub.SetFocus
Me. frmSub.Form.SelHeight = tmpSelHeight
Me. frmSub.Form.SelTop = tmpSelTop
Me. frmSub.Form.SelLeft = tmpSelLeft
Me. frmSub.Form.SelWidth = tmpSelWidth
DoCmd.RunCommand acCmdCopy
Else
Form! frmSub.SetFocus
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy
End If
Me. frmSub.Form.SelHeight = 0
Dim xlApp As Object
Set xlApp = CreateObject("Excel.Application")
With xlApp
.Visible = True
.Workbooks.Add
.ActiveSheet.PasteSpecial Format:="Text", Link:=False, DisplayAsIcon:=False
.Cells.Select
.Cells.EntireColumn.AutoFit
.Range("a1").Select
End With
Set xlApp = Nothing
Call EmptyClipboard
AppActivate "Microsoft Excel"
虽然事情看起来足够稳定...... 我仍在操纵剪贴板,虽然这不是一个问题。 我以后可以看看使用任何现有的Excel实例。 我仍然可以考虑导出到.xls文件,或存储在临时表&将表链接到Excel,作为替代方法。