(現在Access 2003を使用しています)私のプロジェクトには、フォームの中にあるクエリの結果を保持するサブフォームfrmSubがあります(frmMain)。 frmSubは、フォームの代わりにクエリを含むサブフォームコントロールです(SourceObjectプロパティは "Query.qrySearch"に設定されています)。Exitイベントを使用してExcelにコピー/ペーストする
さまざまなランタイムカウンタを使用して、クエリは結果を「最上位」に並べます。ユーザーは手動で必要な結果を手動で選択したり、すべての結果を取得したりすることができます。
私がしたいのは、Excelで結果を開く方法を提供することです(ユーザーが選択しなかった場合、または結果が選択されていない場合)。おそらく頻繁に使用される可能性の高い 'create temp export .xls file'メソッドを無視して、私は現在、ユーザーが現在使用しているctl-C/Vの方法を模倣したコピー/ペースト方法を検討しています。 frmMainに「Excelで開く」ボタンを配置しました。私は選択を私が持っているfrmMain上のボタン 'Excelで開く' の後ろ...
If Me.frmSub.Form.SelHeight > 0 Then
DoCmd.RunCommand acCmdCopy
Else:
DoCmd.RunCommand acCmdSelectAllRecords
DoCmd.RunCommand acCmdCopy
End If
行われた場合> 0を返し、.SelHeight見frmSubのExitイベントで
...
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
Call EmptyClipboardは、クリップボードをクリアするAPIベースのルーチンを呼び出します。 このようにクリップボードを使用することはベストプラクティスではないと考えられますが、合理的な使用が特定できればその考えが普遍的なものかどうかはわかりません(ここでは特に不利になるとは思われません)
問題 上記はうまくいきますが、[Exit to Excel]ボタンをクリックするだけでなく、クリップボードが空の場合はExcelへのエクスポートによって問題が発生するため、Exitイベントを使用する際に問題があります。
サブフォームの終了イベントを開始した「Exit to Excel」ボタンであるかどうかを判断する方法はありますか?これをExitイベントのコードにトラップしますか?私がfrmSubでアクセスできるように見える唯一のイベントは、終了時と入力時です。
コピー/ペースト方法に問題が残っていると思われる場合は、tmp .xlsファイルにエクスポートすることができます。