- ベストアンサー
CSVファイルをACCESSで編集してEXCELに貼り付ける方法
- ACCESSのFORMにボタンを作成し、VBAを使用してCSVファイルを読み込み、編集した後、指定したEXCELシートに貼り付ける方法について困っています。
- 現在、データを一気に読み込んで、2次元の配列に格納し、編集後にEXCELのセルに値を入れていますが、EXCELを更新することができません。
- ACCESSとEXCELを連携する際、ACCESSからEXCELシートを更新するコマンドについて具体的な使い方を教えていただけると助かります。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
これは私が実際に、AccessからExcelを起動して書き込みに成功しているものです。 いろいろと問題があるプロシージャかもしれませんが、とりあえず出来ました。(汗笑) Excel起動の際、既に起動済であっても新しくインスタンスを生成してしまっています。(2重起動) 行頭のタブが無理やり消されて見難いですが、参考になればよいのですが・・・ '* '*Form_売上入力票 '* Private Sub コマンド19_Click() Dim cnn As New ADODB.Connection Dim rstCustomer As New ADODB.Recordset Dim rstDetails As New ADODB.Recordset Dim strDetailsSQL As String Dim strCustomerSQL As String Dim strAbsPath As String Dim intRsCount As Integer Dim intPageCount As Integer Dim i As Integer Dim j As Integer If OpenExcel() Is Nothing Then MsgBox "OpenExcel failed." Exit Sub Else gxLApp.Visible = True End If strAbsPath = Trim(Me.Application.CurrentProject.Path) & "\denpyo.xls" If OpenExcelFile(strAbsPath) Then ' Else MsgBox "OpenExcelFile failed." Call CloseExcel Set cnn = Nothing Set rstCustomer = Nothing Set rstDetails = Nothing Exit Sub End If strCustomerSQL = "SELECT ...(中略);" strDetailsSQL = "SELECT ...(中略);" Set cnn = CurrentProject.Connection rstCustomer.CursorLocation = adUseClient rstCustomer.Open strCustomerSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText rstDetails.CursorLocation = adUseClient rstDetails.Open strDetailsSQL, cnn, adOpenStatic, adLockReadOnly, adCmdText intRsCount = CInt(rstDetails.RecordCount) intPageCount = Int(intRsCount / 5) + 1 Debug.Print "intRsCount = " & intRsCount Call CopyPages(intPage:=intPageCount) rstDetails.MoveFirst For i = 1 To intPageCount Call InsertCustomer(intPage:=i, intTotalPage:=intPageCount, rsData:=rstCustomer) For j = 1 To 5 If rstDetails.EOF Then Exit For Call InsertDetails(intPage:=i, intRow:=j, rsData:=rstDetails) rstDetails.MoveNext Next Next MsgBox "O.K.?" Call CloseExcel Set cnn = Nothing Set rstDetails = Nothing Set rstCustomer = Nothing End Sub '* '*BasExcelAutomation '* Public gxLApp As Object Public gfExcelWasRunning As Boolean Public Function OpenExcel() As Object ' ' Excelを起動する(インスタンスを生成) ' Set gxLApp = CreateObject("Excel.Application") If gxLApp Is Nothing Then MsgBox "MS Excel 9.0 is not installed on your computer" Set OpenExcel = Nothing Exit Function End If Set OpenExcel = gxLApp End Function Public Function CloseExcel() ' ' Excelを終了させる ' ' On Error Resume Next If Not gxLApp Is Nothing Then With gxLApp .ActiveWorkbook.Close False .Quit End With Set gxLApp = Nothing End If End Function Public Function OpenExcelFile(strFileName As String) As Boolean On Error Resume Next gxLApp.Workbooks.Open Filename:=strFileName OpenExcelFile = (Err.Number = 0) If Not OpenExcelFile Then MsgBox strFileName & "を開けませんでした。" & _ vbCrLf & "Err = " & Err.Number & _ vbCrLf & "FileName = " & strFileName End If End Function
その他の回答 (2)
- marsah
- ベストアンサー率42% (3/7)
“EXCELは値が書き込まれないまま、処理が終了する”とのことですが、普通は“値が入った状態でEXCELを画面に表示して処理が終了”されるはずなのですが・・・ その点が問題なのではないでしょうか? 代入しようとしているデータが特殊なものやNullになってはいないでしょうか?
- dayan_dayan
- ベストアンサー率50% (8/16)
はじめまして。質問中の「更新」と言う意味がいまいち良くわかりませんでした。 「更新」とは、 (1)画面の更新をさせたい? (2)セルにいれたあとのExcelシートを保存したい。 (3)その他の意味。 この点について、もうすこし、噛み砕いて説明頂ければ、回答できると思い、 投稿させて頂きました。
補足
dayan_dayanさん、レスをいただいてありがとうございます。 わかりにくい質問ですみませんでした。 ACCESSでEXCELのシートに値を書き込みたいのですが、 現在書いているコード cells(a,b)=ほにょほにょ の書き方ではEXCELは値が書き込まれないまま、処理が終了してしまいます。 せめて値が入った状態でEXCELを画面に表示して処理が終了すば、その後 EXCEL側でシートを保存すればよいのですが。。。
お礼
marsahさん、ご回答をありがとうございます。 EXCELのマクロで動かした場合はちゃんといくのですが、ACCESSから起動すると EXCELのワークシートが一瞬だけ画面に現れて、すぐに消えてACEESSの画面に 戻ってしまうんですよ・・・ うーむ。一体どうすればよいのやら・・・。