最新閲覧日:

みなさま、こんにちは。
ACCESSのFORMにボタンを作って、イベントのビルドでCSVファイルを読み込んで、編集して指定したEXCELシートに貼り付けようとVBAを組んでいるのですが、困ってしまいました。

データを一気に読み込んだあと、2次元の配列にして
aRecord(r, a)にレコードと項目ごとに値をセットしています。
データを編集後、
ES(b).Cells(posR, posC) = aRecord(r, a)
でエクセルのセルに値を入れているのですが、この方法だとEXCELを更新することが
できなくて困っています。

ACCESS/EXCEL連携で、ACCESSからEXCELシートを更新できるコマンドがあると聞いたことがあるのですが、具体的にどのようなコマンドを
どのように使えばよいのか、ご存知ないでしょうか?

もしおわかりになる方がいらっしゃいましたら、是非ご教授下さいますよう
よろしくお願いいたします。

このQ&Aに関連する人気のQ&A

A 回答 (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
    • good
    • 0

“EXCELは値が書き込まれないまま、処理が終了する”とのことですが、普通は“値が入った状態でEXCELを画面に表示して処理が終了”されるはずなのですが・・・


その点が問題なのではないでしょうか? 代入しようとしているデータが特殊なものやNullになってはいないでしょうか?
    • good
    • 0
この回答へのお礼

marsahさん、ご回答をありがとうございます。
EXCELのマクロで動かした場合はちゃんといくのですが、ACCESSから起動すると
EXCELのワークシートが一瞬だけ画面に現れて、すぐに消えてACEESSの画面に
戻ってしまうんですよ・・・
うーむ。一体どうすればよいのやら・・・。

お礼日時:2001/06/11 14:50

はじめまして。

質問中の「更新」と言う意味がいまいち良くわかりませんでした。
「更新」とは、
(1)画面の更新をさせたい?
(2)セルにいれたあとのExcelシートを保存したい。
(3)その他の意味。
この点について、もうすこし、噛み砕いて説明頂ければ、回答できると思い、
投稿させて頂きました。

この回答への補足

dayan_dayanさん、レスをいただいてありがとうございます。
わかりにくい質問ですみませんでした。
ACCESSでEXCELのシートに値を書き込みたいのですが、
現在書いているコード
cells(a,b)=ほにょほにょ
の書き方ではEXCELは値が書き込まれないまま、処理が終了してしまいます。
せめて値が入った状態でEXCELを画面に表示して処理が終了すば、その後
EXCEL側でシートを保存すればよいのですが。。。

補足日時:2001/06/08 10:20
    • good
    • 0

このQ&Aに関連する最新のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード


このカテゴリの人気Q&Aランキング

おすすめ情報

カテゴリ