2016-05-07 28 views
0

(現在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ファイルにエクスポートすることができます。

答えて

0

これに取り組むもう少しの時間を置いて、私は物事を並べ替えました。具体的には、Exitイベントが今だけので、ボタン「Excelにエクスポート」へコピーし、ステージを移動させる、データシートの選択パラメータを格納するために使用されています...

frmSub Exitイベントは... 'の後ろ

tmpSelHeight = Me.frmSub.Form.SelHeight 
tmpSelTop = Me.frmSub.Form.SelTop 
tmpSelLeft = Me.frmSub.Form.SelLeft 
tmpSelWidth = Me.frmSub.Form.SelWidth 

を含み物事が十分安定見えるがfrmMainにエクセル」ボタンで開くには、今、これは問題ではないと予想されるが、私はまだクリップボードを操作してい ... ...

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にリンクする方法を代替方法として保存することも考えられます。

関連する問題