|
いつもお世話になっています。
社会保険資格届出用のデータを作成するのに、コマンドボタンに下のようなコードを記述しました。
やりたいことは、フォーム上で条件をつけて作成したクエリのデータを、指定のエクセルファイルの指定シートの指定場所に貼り付けるということです。
いろいろな過去ログを参考に、なんとかコードを記述し、実行したところ、エクセルファイルに貼り付けるところまではできましたが、最後に、そのファイルを開く操作がうまくいきません。
また、指定エクセルファイルを開いてないのに、開いているときの処理(ファイルを保存ダイアログ)が出てくるなど、ときどき微妙に変な動きをします。
今回初めてエクスポートでなくCopyFromRecordsetを使ったので、記述内容に自信がありません。
無駄や不備があるせいではないかと思うのですが・・。
エクセルの開き方及び微妙な動きの解消について、ご教示をよろしくお願いします。
コードは以下のとおりです。(長くてすみません)
Dim DB As Database
Dim qdf As QueryDef
Dim rst As DAO.Recordset
Dim xlsApp As Object
Dim xlsWkb As Object
Dim MyFile As String
Dim str As String, constr As String
Dim strmsg As String
省略(ここで選択クエリの作成処理)
Set DB = CurrentDb()
Set qdf = DB.QueryDefs("Q_社保エクスポート用")
qdf.SQL = str
qdf.Close
'レコードセットを開く
Set rst = DB.OpenRecordset("Q_社保エクスポート用")
If rst.RecordCount = 0 Then
MsgBox "対象者がいません。", vbOKOnly, "データなし"
rst.Close
DB.Close
Else
rst.Close
DB.Close
'オブジェクトの作成
Set xlsApp = CreateObject("Excel.Application")
'ファイルを開く
MyFile = "D:\My Documents\2008\社会保険届出関連\WT_社保資格喪失.xls"
Set xlsWkb = xlsApp.Workbooks.Open(MyFile)
Set rst = CurrentDb.OpenRecordset("Q_社保エクスポート用", dbOpenDynaset)
xlsWkb.Worksheets("T_社保資格喪失").Range("A11.M100").ClearContents
xlsWkb.Worksheets("T_社保資格喪失").Range("A11").CopyFromRecordset rst
Set rst = Nothing
xlsWkb.Close True: Set xlsWkb = Nothing
xlsApp.Quit: Set xlsApp = Nothing
End If
MsgBox "処理が終了しました。" & vbCr & "D:\My Documents\2008\社会保険届出関連\WT_社保資格喪失.xlsを開いて届出帳票を印刷してください。"
<ここまではうまくいきますが、下の記述では開きませんでした。(オブジェクトがないというエラーメッセージが出ます。>
MyFile = "D:\My Documents\2008\社会保険届出関連\WT_社保資格喪失.xls"
xlsApp.Workbooks.Open (MyFile)
xlsApp.Worksheets("T_社保資格喪失").Activate
xlsApp.Visible = True
xlsApp.UserControl = True
Exit Sub
(アクセス、winともに2000)
ためしに別の記述を試してみたのですが(↓)開きませんでした。(該当のファイルがないというエラーです。)
stAppName = "Excel.exe D:\MyDocuments\2008\社会保険届出関連\WT_社保資格喪失.xls"
Call Shell(stAppName, 1)
|
|