-PR-
解決済み

CSVファイルをACCESSで読み込んで、編集してEXCELに貼り付けたいのですが

  • すぐに回答を!
  • 質問No.84048
  • 閲覧数691
  • ありがとう数1
  • 気になる数0
  • 回答数3
  • コメント数0

お礼率 94% (142/151)

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

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

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

もしおわかりになる方がいらっしゃいましたら、是非ご教授下さいますよう
よろしくお願いいたします。
通報する
  • 回答数3
  • 気になる
    質問をブックマークします。
    マイページでまとめて確認できます。

質問者が選んだベストアンサー

  • 回答No.3
レベル7

ベストアンサー率 42% (3/7)

これは私が実際に、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
関連するQ&A
-PR-
-PR-

その他の回答 (全2件)

  • 回答No.1
レベル7

ベストアンサー率 50% (8/16)

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

お礼率 94% (142/151)

dayan_dayanさん、レスをいただいてありがとうございます。
わかりにくい質問ですみませんでした。
ACCESSでEXCELのシートに値を書き込みたいのですが、
現在書いているコード
cells(a,b)=ほにょほにょ
の書き方ではEXCELは値が書き込まれないまま、処理が終了してしまいます。
せめて値が入った状態でEXCELを画面に表示して処理が終了すば、その後
EXCEL側でシートを保存すればよいのですが。。。
投稿日時 - 2001-06-08 10:20:57
  • 回答No.2
レベル7

ベストアンサー率 42% (3/7)

“EXCELは値が書き込まれないまま、処理が終了する”とのことですが、普通は“値が入った状態でEXCELを画面に表示して処理が終了”されるはずなのですが・・・ その点が問題なのではないでしょうか? 代入しようとしているデータが特殊なものやNullになってはいないでしょうか? ...続きを読む
“EXCELは値が書き込まれないまま、処理が終了する”とのことですが、普通は“値が入った状態でEXCELを画面に表示して処理が終了”されるはずなのですが・・・
その点が問題なのではないでしょうか? 代入しようとしているデータが特殊なものやNullになってはいないでしょうか?
お礼コメント
happa-happa

お礼率 94% (142/151)

marsahさん、ご回答をありがとうございます。
EXCELのマクロで動かした場合はちゃんといくのですが、ACCESSから起動すると
EXCELのワークシートが一瞬だけ画面に現れて、すぐに消えてACEESSの画面に
戻ってしまうんですよ・・・
うーむ。一体どうすればよいのやら・・・。
投稿日時 - 2001-06-11 14:50:09
このQ&Aで解決しましたか?
AIエージェント「あい」

こんにちは。AIエージェントの「あい」です。
あなたの悩みに、OKWAVE 3,500万件のQ&Aを分析して最適な回答をご提案します。

関連するQ&A
-PR-
-PR-
このやり方知ってる!同じこと困ったことある。経験を教えて!
このQ&Aにはまだコメントがありません。
あなたの思ったこと、知っていることをここにコメントしてみましょう。

その他の関連するQ&A、テーマをキーワードで探す

キーワードでQ&A、テーマを検索する
-PR-
-PR-
-PR-

特集


新大学生・新社会人のパソコンの悩みを解決!

いま みんなが気になるQ&A

関連するQ&A

-PR-

ピックアップ

-PR-
ページ先頭へ