- 締切済み
このコードを保存する方法を教えてください!
アクセスの素人です。 アクセスからエクセルのシートを作るコードなのですが、保存方法を追記する方法は、どうすれば良いか教えてください。 Private Sub btnTEST001_Click() Dim rs As New ADODB.Recordset 'ADOのレコードセット Dim objEXCEL As Object 'Excel参照用 Dim nYLINE As Long 'セット位置 'Excelを起動する、オブジェクトの作成 Set objEXCEL = CreateObject("Excel.Application") 'オブジェクトの作成 objEXCEL.Visible = True 'Excelを見えるようにする '新規のブックを追加する objEXCEL.Workbooks.Add 'Excelのブックを作成 'Excelのシートを追加、シート名を変更する objEXCEL.Sheets.Add 'シートを追加する objEXCEL.ActiveSheet.Name = "DATA" 'シート名をDATAにする 'レコードセットを開く(Q_YUBIN_7) rs.Open "Q_YUBIN_7", CurrentProject.Connection, _ adOpenKeyset, adLockOptimistic '見出しの代入とカウンタの初期化 objEXCEL.Cells(1, "A") = "郵便番号" objEXCEL.Cells(1, "B") = "件数" nYLINE = 2 '2行目からデータをセットする 'レコードセットからExcelへデータをセットする 'ループ処理 While rs.EOF = False 'いつものEOFが偽の間 'データをセットする(Accessから転記) objEXCEL.Cells(nYLINE, "A") = rs("郵便番号").Value objEXCEL.Cells(nYLINE, "B") = rs("郵便番号のカウント").Value '次を読む And カウンタを移動する rs.MoveNext '次のレコードに移動しないと、とんでもないことに(笑) nYLINE = nYLINE + 1 'カウンタも忘れずに+1する Wend '通常は、ここでExcelを保存するんだけど、今回は開きっぱなしの手抜き rs.Close '開いたら閉じろ、ドアを開けたら閉めるってしつけられたでしょ(笑) Set rs = Nothing '変数も後始末しますか。使った器はキレイにしろって? End Sub
- みんなの回答 (5)
- 専門家の回答
みんなの回答
- imogasi
- ベストアンサー率27% (4737/17069)
回答者が >各コードにコメントを付けられると言うことは、その意味と全体的な流れを理解できているということです、ご立派です と書いておられますが、 質問者は何処かの回答やWEB掲載コードをコピーしたのではないですか。 その原作者が講義・解説口調でコメントを入れたのでしょう。 だから、保存のコードが>(質問者は)アクセスの素人です。、のためファイルの保存のコード判らないのでしょう。 Googleで「VBA ファイル保存」で照会すれば直ぐ例が出るのに。 http://officetanaka.net/excel/vba/file/file03.htm http://www.happy2-island.com/excelsmile/smile03/capter00804.shtml http://questionbox.jp.msn.com/qa1301205.html >xlAppにした場合、どの様なコードになるのですか、 と聞いているぐらいですから。 >保存方法を追記する の「方法」とはどういうことを言うのでしょうか。 ただ単に追加したブックで行った、シートの更新内容をブックとして名前をつけて、ブックを保存したい、ということでしょう。
- Wendy02
- ベストアンサー率57% (3570/6232)
#2の回答者です。 >xlAppにした場合、どの様なコードになるのですか ただ、読み替えだけですから、置換してみれはいいだけです。そうすると、次に、下位のオブジェクトの名前なども、ある程度決まってくるはずです。objExcelでも本当に悪いわけではありません。 何か、とてもいいわけめいているのですが、今回は、上位オブジェクトから下位オブジェクトに下がっていく方法ですから、そのオブジェクトのステージが、Book なのかApplication なのか分かるようにしておいたほうがよいと思いました。 案外、こういう変数名は、決まった形に習慣づけていたほうがよいのです。そうではないと思うのでしたら、それでも、強制的なものでもなければ、エラーが出るわけでもありませんから、それは任意の名前でよいです。普段は、あまり他人に見せるものでもありませんからね。 特に、Access 中心のプログラムの場合は、違ったスタイルのコードに出会います。Access のプログラムに、オートメーション・オブジェクト(CreateObjectやGetObject)を使う方法には、Application から降りていく方法というのが、一般的というか楽だ思うのですが、ブックやシートから、逆に、Application に上がっていく方法を、Microsoft サポートが提示しています。(時代的に古いような気がします) たとえば、BookオブジェクトやSheetオブジェクト取得して、それをobjExcelの変数に置き、そこから、objExcel.Application という取り方を、Access 中心のプログラマの人は書く人もいます。そういう場合は、objExcel というスタイルもあるのかとは思います。 こういうものは、プログラミング・スタイルで、どちらがどうという問題ではないのですから、上位オブジェクトを取得してから降りてくる場合は、Application が分かる変数のほうがよいと考えたのです。 ここのサイトでは、マクロコードは、Excel中心だから、思わず書いてしまいましたが、それが、間違いだというわけではないということです。ただ、こういうスタイルはきちんと押さえておいたほうがよいです。
- cistronezk
- ベストアンサー率38% (120/309)
各コードにコメントを付けられると言うことは、その意味と全体的な流れを理解できているということです、ご立派です。ただ、他人が読むことを考慮に入れた方がよろしいかと。 Excelのオブジェクトの使い方をご存知なら、その情報を得たところに「保存」の仕方もあると思うのですが、何か不都合でもあったのでしょうか? ・確認メッセージを出さずにブックを上書き保存するには? http://www.asahi-net.or.jp/~ZN3Y-NGI/YNxv923.html BookのCloseとExcelの「Quit」もお忘れなく。
- Wendy02
- ベストアンサー率57% (3570/6232)
こんにちは。 単純なコードですが、コメントがゴテゴテとしすぎて、コードが読みにくいです。 この程度では、ひとつかふたつで十分です。ご質問のようなコメントの書き方は、マイナス要因になります。 それから、オートメーション・オブジェクトを作るときには、絶対に、気をつけなくてはならないポイントがあります。 欲を言えば、Excelの変数名がうまくありません。 objEXCEL ---> xlApp です。 今回は、そのままにしましたが、 objEXCEL に確保されるものは、Excel.Application ですから、xlApp と分かりやすくします。 つまり、ブックを生成したら、そのブックのオブジェクトをApplicaton オブジェクトの下に作ったほうが扱いやすいです。ただ、これが、COMの場合は、この下にも作らないといけません。そうしないと、オブジェクトが残ってしまいます。 次に、途中でエラーが発生したときに、オートメーション・オブジェクトが残ってしまいますから、必ず、On Error Goto とエラートラップで、オートメーション・オブジェクトを解放できるように作ってあげなくてはなりません。 以下の、Excelのファイル名は、工夫が必要です。Format(Date, "yymmdd") & ".xls" など objBook.SaveAs Filename:="Test090925.xls" 同名ファイルの場合は、Excel側が聞いてきます。 '------------------------------------------- Private Sub btnTEST001_Click() Dim rs As New ADODB.Recordset Dim objEXCEL As Object Dim objBook As Object Dim nYLINE As Long On Error GoTo Errhandler Set objEXCEL = CreateObject("Excel.Application") objEXCEL.Visible = True Set objBook = objEXCEL.Workbooks.Add objBook.Sheets.Add objBook.ActiveSheet.Name = "DATA" rs.Open "Q_YUBIN_7", CurrentProject.Connection, adOpenKeyset, adLockOptimistic objBook.ActiveSheet.Cells(1, "A").Value = "郵便番号" objBook.ActiveSheet.Cells(1, "B").Value = "件数" nYLINE = 2 While rs.EOF = False objBook.ActiveSheet.Cells(nYLINE, "A").Value = rs("郵便番号").Value objBook.ActiveSheet.Cells(nYLINE, "B").Value = rs("郵便番号のカウント").Value rs.MoveNext nYLINE = nYLINE + 1 Wend Errhandler: 'Excelファイル名 objBook.SaveAs Filename:="Test090925.xls" objBook.Close False objEXCEL.Quit Set objBook = Nothing 'オブジェクトの解放 Set objEXCEL = Nothing rs.Close Set rs = Nothing End Sub
- Chary_spy
- ベストアンサー率40% (75/183)
マクロの自動記録で、保存してみてください。 それで分からなければ、作るの辞める事をお勧めします。
お礼
有り難うございます、保存できました。 でも、Wendy02さんの言うxlAppにした場合、どの様なコードになるのですか?