表記のとおりADOを使用してExcelデータをAccess取込むのですが、Sheet1のデータを読込んだ後、引続きSheet2のデータを読込む様にVBAコードを書いたつもりですが、Sheet1をアクティブにした状態でExcelデータを保存していたらSheet1のデータを重複して取込み、Sheet2をアクティブにした状態でExcelデータを保存していたらSheet2のデータを重複して取込んでしまいます。どこをどうすればSheet1のデータを読込んだ後、引続きSheet2のデータを読込む様に出来るのでしょうか?
====== VBAコードの抜粋 =========
Dim xlApp As Object ' Excelのアプリケーション定義
Dim xlBook As Object ' ExcelのワークブックのフォルダPath+ファイル名を定義
Dim xlSheet As Object ' Excelの参照するシート名を定義
Dim SheetName As String ' シート名を代入
Dim SheetCount As Byte ' シートの選択
For SheetCount = 1 To 2 ' 1回目のループでSheet1から2回目のループでSheet2からデータを取り込む
If SheetCount = 1 Then SheetName = "Sheet1"
If SheetCount = 2 Then SheetName = "Sheet2"
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("ファイルPath+ファイル名")
Set xlSheet = xlBook.Worksheets(SheetName)
Set Wcell = xlSheet.Range("A1")
Set Cn = CurrentProject.Connection
Rs.Open "取込みテーブル", Cn, adOpenKeyset, adLockOptimistic
xlApp.Application.Visible = True
データを取込むコードあり(省略)
xlBook.Close
xlApp.Visible = False
Set xlSheet = Nothing
Set xlBook = Nothing
Set xlApp = Nothing
Next SheetCount
No.2ベストアンサー
- 回答日時:
>ADOを使用してExcelデータをAccess取込む際のExcelシートの選択について
ソースを拝見しましたが、「取り込み」の部分はADOは使ってませんね。
(取り込んだデータを、テーブルに保存する所がADOです。)
「ADOで取り込む」が目的なら、No1さんの回答になると思います。
-----------------------------------------------------------
このままの方針で、話を進める場合・・・
質問のソースは、問題ありません。(動作確認しました)
省略した、「データを取込むコード」に問題があると思います。
この部分を、補足して下さい。
推測ですが、xlBook.ActiveSheet を使ってないですか?
ちゃんと、Wcell を使ってデータを参照してますか?
-----------------------------------------------------------
また、間違いではないですが、高速化の為に
修正した方が良いと思われる点があります。
下記のソースのコメントをご覧下さい。
以下、私が動作確認したソース(抜粋)
'ブックを開く部分は共通なのでループの外へ
Set xlApp = CreateObject("Excel.Application")
Set xlBook = xlApp.Workbooks.Open("c:\temp\001.xls")
For SheetCount = 1 To 2 ' 1回目のループでSheet1から2回目のループでSheet2からデータを取り込む
If SheetCount = 1 Then SheetName = "Sheet1"
If SheetCount = 2 Then SheetName = "Sheet2"
Set xlSheet = xlBook.Worksheets(SheetName)
Set Wcell = xlSheet.Range("A1")
'確認のため、A1 の内容を表示してみる
MsgBox Wcell.cells(1,1)
Next SheetCount
'ブックを閉じる処理もループの外へ
xlBook.Close
お答えありがとうございます。
その後自身でもいろいろ調べて、あるWebページでシートをセレクトすり必要があることがわかりました。
http://www.accessclub.jp/bbs/0079/beginers29334. …
そこで
ループの際のシート選択のコードを次のように変更しうまくいきました。
If SheetCount = 1 Then xlApp.Sheets("Sheet1").Select ' 取込み先シートの選択 SheetCountが1の場合
If SheetCount = 2 Then xlApp.Sheets("Sheet2").Select ' 取込み先シートの選択 SheetCountが2の場合
> また、間違いではないですが、高速化の為に
修正した方が良いと思われる点があります。
アドバイスありがとうございます。
そうですよね、ExcelやBookを開けたり閉めたり無駄があります。修正します。
No.1
- 回答日時:
エクセルのデータ部分に名前をつけてその名前でレコードセットを取得してみてはいかがですか
Dim cnExl as new ADODB.Connection
Dim rsExl as new ADODB.Recordset
dim n as integer
' Excelのバージョンにあわせて『Excel 8.0』を適宜修正してください
cnExl.ConnectionString = "Provider=Microsoft.jet.oledb.4.0;" & _
"DataSource=" & ファイルパス & ";" & _
"Extended Properties=Excel 8.0;"
cnExl.Open
for n=1 to 2
' ExcelでTable1,Table2と名前をつけたデータを取得
rsExl.Open "Table"& n, cnExl, adOPenKeyset, adLockOptimistc
rsExl.MoveFirst
do until rsExl.Eof
' ここでレコードのインサートコマンドを実行
rs!ID = rsExl!ID
rsExl.MoveNext
Loop
rsExl.Close
next
cnExl.Close
といった具合で ・・・
すみません。質問の仕方がまずかったようです。
Access側のテーブル書込みのみADOを使用してます。
Excelの取り込み側をADOでやるとこういうコードになるのですね。
勉強になります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonでクラスで複数のメソッドを利用する方法 2 2022/04/15 04:17
- Visual Basic(VBA) このVBAでExcelアプリケーションを作成は必要ですか? 3 2023/07/19 21:13
- その他(Microsoft Office) マクロVBAについて 1 2022/09/06 18:12
- Visual Basic(VBA) VBAでoutlook365が起動しません。 4 2022/08/25 13:31
- Visual Basic(VBA) 【ご教示ください】VBAの記述方法がわかりません。 2 2022/08/12 21:28
- Visual Basic(VBA) 複数のcsvファイルをExcelに一括変換したい 2 2023/03/03 12:44
- Visual Basic(VBA) 3つのプロシージャをまとめたら実行時エラー発生で対応不能 6 2022/05/17 01:47
- Visual Basic(VBA) 【前回の続き続きです、ご教示ください】VBAの記述方法がわかりません。 2 2022/08/24 20:49
- その他(プログラミング・Web制作) python文字化けエラーが発生しているようです 3 2022/04/13 19:41
- Visual Basic(VBA) エクセルのマクロを使ってメールを送る方法について教えてください 2 2022/03/29 01:36
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
教えて下さい
-
VBAで「"」[']をエスケープする...
-
【エクセル】測定時間がバラバ...
-
S9タイプからXタイプにデータ...
-
Accessで該当データにフラグを...
-
VBA 毎日取得するデータを順番...
-
エクセルで2つの時系列のデー...
-
配列でデータが入っている要素...
-
シリアル通信でのデータ受信
-
gridでデータ削除後に上へ1件...
-
重複データを書き込まないよう...
-
チェックサムとCRC
-
特定のデータの抽出方法を教え...
-
Excelのマクロでワードのテキス...
-
Excel VBAでのオートフィルター...
-
ActiveReportについて
-
モジュラス103の算出方法について
-
VBにおいてフォーム間の変数の...
-
javaでDBからデータを取ってき...
-
マクロで同じフォルダにある画...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
教えて下さい
-
配列でデータが入っている要素...
-
【エクセル】測定時間がバラバ...
-
メモ帳(テキストデータ)をExc...
-
VBA 空白セルを削除ではない方...
-
多量のSUMIF式を軽くしたい
-
Excelのマクロでワードのテキス...
-
エクセルで2つの時系列のデー...
-
この行は既に別のテーブルに属...
-
VBAを使ってOutlookメール本文...
-
シーケンサにパソコンからアク...
-
EXCELVBAでSQLserverからデータ...
-
ブレーカー落ちで壊れたりしな...
-
[C言語] コメント文字列を無視...
-
オープンチヤットでデータ削除...
-
モジュラス103の算出方法について
-
javaでDBからデータを取ってき...
-
カンマからスラッシュに
-
VBA 毎日取得するデータを順番...
-
Android携帯をUSBメモリ代わりに
おすすめ情報