Accessへのエクセルデータインポートでデータが消える問題の解決方法とは?

このQ&Aのポイント
  • アクセス2000の特定テーブルへ、エクセルデータをインポートする際に、新しくデータを追加すると、これより前に入っていたデータがレコードを残して消えてしまう問題について、解決方法を教えてください。
  • エクセルファイルの選択とAccessテーブルへのインポート手順について具体的に説明してください。
  • エクセルデータをインポートする際に予期せぬエラーが発生する場合の対処方法を教えてください。
回答を見る
  • ベストアンサー

Accessへのエクセルデータインポート

Accessへのエクセルデータインポート 環境:Access2000/WinXP アクセス2000の特定テーブルへ、エクセルデータをインポートするよう組んだのですが、新しくデータを追加すると、これより前に入っていたデータがレコードを残して消えてしまいました。 新規データを追加した際にただの追加としたいのですがどこがおかしいのでしょうか。 Private Sub データ登録_Click() Dim objExcel As Object Dim varFilePath As Variant Dim bln As Boolean Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "受講者情報一覧" Set objExcel = CreateObject("Excel.Application") varFilePath = objExcel.GetOpenFilename("Microsfot Exel (*.xls), *.xls", , "xls選択") If varFilePath <> False Then varxls = varFilePath Else Exit Sub End If Set objExcel = Nothing varxls = varFilePath strrange = "" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & "へ、インポートします。" DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, varac, varxls, True MsgBox "正常にインポート完了しました。" End If Exit Sub エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Sub End Sub

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

  • ベストアンサー
  • papapa0427
  • ベストアンサー率25% (371/1472)
回答No.1

>strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & "へ、インポートします。" >DoCmd.DeleteObject acTable, varac >If MsgBox(strmsg, vbOKCancel) = vbOK Then の DoCmd.DeleteObject acTable, varac でアクセスのテーブルを消去しているからです。

picicate
質問者

お礼

例文そのまま使っていたので見落としてました; ありがとうございます。

関連するQ&A

  • エクセルVBA アクセスにインポート

    エクセルのデータ(列数、行タイトルは都度かわる)をアクセスにインポートしテーブルを作成したいと思っています。 VBAでこの処理をおこないたく、下記のコードで実行したのですがデバッグがはしってしまいます。 (DとEでデバッグ) 原因がお分かりになる方がおりましたら、教えていただけますでしょうか? 何卒、よろしくお願い申し上げます。 Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "T_TESTTABLE" ' --- A varxls = "C:\Users\AC\Desktop\ACTEST\RAWDATA.xlsx" ' ---B strrange = "TEST_RAWDATA" ' --- C strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" DoCmd.DeleteObject acTable, varac ' --- D If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange ' -- E MsgBox "データ入力は、正常に完了しました。" End If Exit Function エラー: MsgBox "予期せぬエラーが発生しました。" & Chr(13) & _ "エラー番号:" & Err.Number & Chr(13) & _ "エラー内容:" & Err.Description, vbCritical Exit Function End Function

  • [PG]AccessVBAでファイルのインポートする方法

    [PG]AccessVBAでファイルのインポートする方法 VBAでエクセルファイルのインポートする機能を実装しています。 下記のコードで実行しますと実行時エラー"3011"が表示され DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange で止まります。何か解決方法を教えていただけないでしょうか? Function ExcelDataImport() 'On Error GoTo エラー Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String ' --- Accessテーブルを指定します。存在していなければ自動的に作成します。 varac = "tbl_売上げテーブル" ' ---Excelファイルを指定します。必ず、存在していなくてはいけません。 varxls = "C:\売上げ.xls" ' --- データ入力のシート名とセル範囲を指定します。 ' なお、省略が可能です。省略した場合は、ワークシート全体がインポートされます。 strrange = "売上げシート!A1:D10" strmsg = "Excelファイル" & varxls & " を、Accessテーブル " & varac & _ "へ、データ入力を行います。" & Chr(13) & _ "Excelファイルの入力レンジは、 " & strrange & " です。" ' --- DeleteObjectメソッドを用いて、tbl_売上げテーブルを削除します。 ' --- TransferSpreadsheetメソッドを用いてデータをインポートします。 DoCmd.DeleteObject acTable, varac If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ varac, varxls, True, strrange MsgBox "データ入力は、正常に完了しました。" End If Exit Function

  • アクセスからエクセルへインポートの際に

    アクセスからエクセルへクエリの結果をインポートしています。 そこでワークシートができるのですが、その後、そのワークシート が残るので同じ処理をした際に、同じ名前のワークシートに上書き すると思っていたのですが、新たにワークシートを作成して しまい困っています。 VarAccess = "入力禁止LEJOUR" の部分がワークシート名になりますが 同じ処理をすると入力禁止LEJOUR1というワークシートが横に できてしまいます。 これを入力禁止LEJOURのシートに上書きさせるには どんなコードを使用したらいいでしょうか? 教えてください。 よろしくお願い致します。 Private Sub コマンド15_Click() On Error GoTo エラー Dim VarAccess As Variant Dim VarExcelpass As Variant Dim strmsg As String VarAccess = "入力禁止LEJOUR" VarExcelpass = "\\Shiob030\共有\生産戦略事業部\03.生産L.C.海\B.指図進捗表(月単位)\07\SS\07SS-LE JOUR.xls" strmsg = VarAccess & "を、Excelファイルへ出力します。" & _ Chr(13) & "出力先は" & VarExcelpass & "、 シート名は" _ & VarAccess & "です。" & Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel9, VarAccess, VarExcelpass, True MsgBox "データ出力は、正常に完了しました。" End If Exit Sub エラー: If Err.Number = 3044 Then MsgBox "Excelファイルのパス指定が間違っています。", vbCritical Else MsgBox "予期せぬエラーが発生しました。", vbCritical End If End Sub

  • 複数のエクセルファイルをインポートする方法

    仕事でアクセスを使ってエクセルファイルをまとめて分析する ようなことしてますが、任意に指定したフォルダにある エクセルファイルの指定したワークシートをインポートする コードがわかりません。 ちなみに Fanction ExcelDataImport() On Error GoTo エラー  Dim varac As Variant Dim varxls As Variant Dim strrange As String Dim strmsg As String varac = "tab_原価構成" varxls = "c:\原価構成表.xls" のこのエクセルファイルを指定する部分で任意のフォルダの中の すべてのエクセルファイルを指定したいのと・・ strrange = "sheet2!b1:z1000" 複数のエクセルファイルだが、シート名は同じで指定する 範囲も同じ場合はこれでいいのか? がわかりません。 どなたか教えていただけないでしょうか? お手数ですがよろしくお願いします。

  • エクセルテーブルをアクセステーブル取込む

    エクセルで作成したテーブルデータを取り込むときに余分に空白のレコードが取り込まれてしまうんですが原因が分かりません。 下記コードで処理してます。 Dim strac As String Dim strxls As String Dim strrange As String Dim strMsg As String strac = "T_障害票マスタ" 'Accessテーブルを指定します。 strxls = テキスト0 'エクセルファイルを指定します。 strrange = "T_障害票!" 'データ入力のシート名とセル範囲を指定します。 strMsg = "エクセルファイル" & strxls & " を、Accessファイル " & strac & _ "として、データ入力を行います。" & _ "よろしければ、OKをクリックして下さい。" 'MsgBoxのメッセージ If strxls = "" Then MsgBox "ファイルを選択して下さい。" 'テキストボックスの確認 Exit Sub End If 'DoCmd.DeleteObject acTable, strac 'テーブルを削除します。 If MsgBox(strMsg, vbOKCancel, "import") = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True, strrange MsgBox "インポートは、正常に完了しました。" End If Exit Sub なお取り込むテーブルデータはフィールド行を抜かして常に1レコードだけです。 アクセスでは既存のテーブルに保存してます。 詳しい方お願いします。

  • エクセルデータをAccessに取り込む時のコツ

    いつもお世話になっております。 Access2000(OSはWindowsXP)上にボタンを作り、これをクリックするとExcelデータを自動的にインポートするプログラムを作りました。 プログラムはインターネットを調べて、下記のように書きました。 これはこれで使えるのですが、現在のプログラムの記述では、今回エクセルデータをインポートすると、前回取り込んでいたエクセルデータが一旦削除され、今回取り込んだエクセルデータに置き換わります。 これを、前回取り込んだエクセルデータに、今回取り込んだエクセルデータが追加されるような形になれば、より便利に使えるので、その記述の仕方が分かる方がおられましたら、是非教えて頂きたく思います。 どうぞ宜しくお願い致します。 (記述したプログラム) -------------------------------------------------------------------------------- Dim strac As String Dim strxls As String Dim strrange As String Dim strmsg As String strac = "T_回収お客様情報" 'Accessテーブルを指定 strxls = "C:\回収お客様情報.xls" 'エクセルファイルを指定 strmsg = "エクセルファイル" & strxls & "を、" & strac & _ "という名前のファイルとして、データ転送を行います。" & Chr(13) & Chr(13) & _ "よろしければ、OKをクリックしてください。" 'MsgBoxのメッセージ DoCmd.DeleteObject acTable, strac 'テーブルを削除 If MsgBox(strmsg, vbOKCancel, "Microsoft Access Club") = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True MsgBox "データ入力は、正常に完了しました。" End If Exit Sub --------------------------------------------------------------------------------

  • AccessVBA:TransferSpreadSheetメソッドで既存テーブルに挿入は出来る?

    元となるAccessテーブルはあります。 そこに、ExcelからTransferSpreadSheetメソッドを使って、フィールド挿入という形が出来ますでしょうか。 指定したExcelデータじたいのインポートは出来てますけど、挿入となるとさっぱり分かりません。 (Win2000/Access2000/Excel2000) 現在の書き込みは以下のとおりです。 Function ExcelDataImport() On Error GoTo Err_コマンド1_Click Dim varac As Variant Dim varxls As Variant Dim strrange As string Dim strmsg As string varac = "既存テーブル" varxls = "C:\Temp\EX.xls" strrange = "(A1:A1000)" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, varac, varxls, True, strrange (エラーメッセージ定義が続く) End Function --------------------------------------------------Private Sub Excelin_() Call ExcelDataImport End Sub

  • CSVデータをAccess2000に自動取得

    いつもお世話になっております。 Access2000(OSはWindowsXP)上にボタンを作り、これをクリックするとExcelデータを自動的にインポートするプログラムを作りました。 このプログラムを利用して、エクセルデータではなく、CSVデータをインポートするように変更しようと思っていますが、インターネットを調べても、今一つ要領を得ません。 どの部分をどのように修正すればよいのか、お分かりの方がおられれば、是非ご教授をお願いします。 どうぞ宜しくお願い致します。 (記述したプログラム) ------------------------------------------------------------------ Dim strac As String Dim strxls As String Dim strrange As String Dim strmsg As String strac = "T_回収お客様情報" 'Accessテーブルを指定 strxls = "C:\回収お客様情報.xls" 'エクセルファイルを指定 strmsg = "エクセルファイル" & strxls & "を、" & strac & _ "という名前のファイルとして、データ転送を行います。" & Chr(13) & Chr(13) & _ "よろしければ、OKをクリックしてください。" 'MsgBoxのメッセージ DoCmd.DeleteObject acTable, strac 'テーブルを削除 If MsgBox(strmsg, vbOKCancel, "Microsoft Access Club") = vbOK Then DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel8, _ strac, strxls, True MsgBox "データ入力は、正常に完了しました。" End If Exit Sub ---------------------------------------------------------------------

  • ACCESS エクスポート ダイアログ ファイル名取得

    ACCESS2003で作成したデータをダイアログで指定したファイル名でエクスポートしたいのですが、上手くできません。 ダイアログが開きその指定したフォルダーにあるエクセルファイルを選択すれば、正常にエキスポートできるのですが、 開いたダイアログにファイル名を入力すると、それ以降動かなくなります。 基本的なことが間違っているのでしょうか?? 詳しい方教えてください。下記にコードした内容を書きました。 よろしくお願いします。 Private Sub cmbTransExcel_Click() On Error GoTo Err_cmbTransExcel_Click Dim fileSaveName As Variant Set dlg = Application.FileDialog(msoFileDialogOpen) With dlg .Title = "チェック" .ButtonName = "エキスポート" .InitialFileName = "C:\Program Files\DATA\" .InitialView = msoFileDialogViewList .AllowMultiSelect = False .Filters.Clear .Filters.Add "xls", "*.xls" End With With dlg If .Show = -1 Then For Each vntPath In dlg.SelectedItems strPath = vntPath Next Else Set dlg = Nothing Exit Sub End If End With Set dlg = Nothing Dim strac As String Dim varxls As Variant Dim strmsg As String strac = "Q_チェック" 'Accessファイルを指定します。 varxls = strPath 'エクセルファイルを指定します。 strmsg = strac & " を、Excelファイルへ出力します。" & Chr(13) & _ "出力先は" & varxls & "、 シート名は" & strac & "です。" & _ Chr(13) & "よろしければ、OKをクリックして下さい。" If MsgBox(strmsg, vbOKCancel) = vbOK Then '最初のデータをフィールド名として使います。 DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, strac, varxls, True MsgBox "EXCELの出力が正常終了しました。", vbInformation, "処理終了" End If Exit_cmbTransExcel_click: Exit Sub Err_cmbTransExcel_Click: MsgBox "EXCELの出力が異常終了しました。", vbCritical, "エラー!" Resume Exit_cmbTransExcel_click End Sub

  • アクセス(access)からエクセルにエクスポート

    アクセスから、エクセルにクエリのデータを出力する際に、 「TransferSpreadsheet」を使用していますが、 そのエラー処理について、教えて下さい。 保存しようとしているファイルが既に開かれている場合に、 処理を中止し、エラーメッセージを出したいのですが、 どのようにすればいいのでしょうか? なお、現在のVBAは次のとおりです。 Private Sub コマンド01_Click() Dim a As String Dim b As Variant a = "Q_一覧表" b = "C:\一覧表.xls" DoCmd.TransferSpreadsheet acExport, _ acSpreadsheetTypeExcel9, a, b, True MsgBox "データを出力しました。" Exit Sub End Sub

専門家に質問してみよう