• ベストアンサー

ACCESSで EXCELのデータをインポートするには

よろしくお願いします。ACCESS2000,EXCEL2000を使っています。 運営報告.XLS の一部のデータをテーブル(TBL入金)にインポートしたいのです。 1.マクロを組みました。添付をご覧下さい。 ワークシート名はどのように定義しますか? 目的のワークシートが左端にあるときは予定通りですが 2.実はACCESSのAPが入っているフォルダーで関連のファイルを処理したいので次のようにコーディングしました Private Sub 入金インポート_Click() Dim ファイル名 As String ファイル名 = Replace(CurrentProject.FullName, CurrentProject.Name, "") & "運営報告.xls" DoCmd.TransferSpreadsheet acImport, 3, TBL入金, ファイル名, yes, "Q1:S2" End Sub ここでもワークシート名は要求しません 実行時エラー'2495' このアクションまたはメソッドを実行するには、[Table Name/テーブル名]引数が必要です。 のメッセージが出ます。どのようにしたらよいでしょうか コーディング中 "Q!:S2"に続いて「,」を入力するとUseOAを要求しているようですがこれはどのようなものですか

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

  • ベストアンサー
回答No.4

>acSpreadsheetType の番号表のサイトご紹介いただけませんか VBEのデバッグモードでも確認することが出来ます。URLでは、 http://www.microsoft.com/japan/technet/scriptcenter/resources/qanda/apr07/hey0403.mspx や、回答2の方が紹介されているページの最後にあるリンク http://www.accessclub.jp/samplefile/help/help_126_1.htm などがあります。

shinkami
質問者

お礼

数度に亘るご指導感謝です。 エクスポートのときはシート名、セルの指定が出来ないこともわかりました(納得したわけではありません)

その他の回答 (3)

回答No.3

他にも問題がありましたね。 「3」ー>「8」 シート名を指定したいなら(たとえばSheet1の場合) 「"Q1:S2"」ー>「"Sheet1!Q1:S2"」 となります。

shinkami
質問者

お礼

ご回答有難うございます Private Sub 入金インポート_Click() Dim ファイル名 As String ファイル名 = Replace(CurrentProject.FullName, CurrentProject.Name, "") & "\運営報告.xls" DoCmd.RunSQL "delete from tbl入金" DoCmd.TransferSpreadsheet acImport, 8, "TBL入金", ファイル名, True, "請求!Q1:S10" End Sub これで解決ですが acSpreadsheetType の番号表のサイトご紹介いただけませんか

  • imogasi
  • ベストアンサー率27% (4737/17068)
回答No.2

アクセスのモジュール側で Sub test04() DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, _ "社員7", "C:\Documents and Settings\xxx\My Documents\01化.xls", True, "検索表!A1:G12" End Sub 別の質問の時にテスト確認済み。 01化.xlsはインポートするエクセルのブック名に替え acSpreadsheetTypeExcel9の部分は http://www.accessclub.jp/samplefile/samplefile_126.htm など、Googleで「acSpreadsheetTypeExcelXX」で照会のこと。 シート名と範囲は質問者の実情に合わせる。 これでシートとその一部のセル範囲の扱い方がわかるだろう。 ーー この点が納得できうまく行ったら、あと何か質問に書いているが、別途未解決点があるなら、その点だけ、補足で、要求したら。

shinkami
質問者

お礼

ご回答及び参考サイト紹介有難うございます。 戴いたコードの固有名、ユーザ名を差し替えると成功しました。

回答No.1

とりあえず、「TBL入金」を「"TBL入金"」と文字列にする、「yes」を「True」にする、つまり DoCmd.TransferSpreadsheet acImport, 3, "TBL入金", ファイル名, True, "Q1:S2" としたら、どうなりますか?

shinkami
質問者

お礼

お騒がせしました。 No.2の:imogasi様のコードを参考にして Private Sub 入金インポート_Click() Dim ファイル名 As String ファイル名 = Replace(CurrentProject.FullName, CurrentProject.Name, "") & "\運営報告.xls" DoCmd.RunSQL "delete from tbl入金" DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "TBL入金", ファイル名, True, "請求!Q1:S2" End Sub で通過しました。 これでワークシート指定の件も解決です。 よく分かりませんが 「acSpreadsheetTypeExcel」はEXCELの種類のようですね

shinkami
質問者

補足

ご返答有難うございます。 DoCmd.TransferSpreadsheet acImport, 3, "TBL入金", ファイル名, True, "Q1:S2" で エラーコードが変わりました。 実行時エラー'3274' 外部テーブルのフォーマットが正しくありません

関連するQ&A

  • Access VBAでファイルのインポートについて

    あるディレクトリにAccessのmdbファイルを置き、「インポート」フォルダを隣に置きます。 このフォルダ内にCSVファイルを置き、それをVBAでテーブル「tbl_import」にインポートさせたいのです。 ちなみにインポート後はディレクトリ「インポート」下層のディレクトリ「インポート済」に移動させたいのです。 下記例文では「file.csv」と書いていますが、このファイル名はインポートの都度、常に変わります。 インポートさせるファイルは常に一つです。 「*」を用いれば出来ると思っていたのですが、うまくいきません。 良い方法を教示いただけませんか。 DoCmd.RunSQL "DELETE * FROM tbl_import" DoCmd.TransferText acImportDelim, "インポート定義", "tbl_import", CurrentProject.Path & "\インポート\file.csv", True FileCopy CurrentProject.Path & "\インポート\file.csv", CurrentProject.Path & "\インポート\インポート済\file.csv" Kill CurrentProject.Path & "\インポート\file.csv"

  • EXCELファイルをACCESS2000へインポート

    やりたいことは、access2000でAAA.xlsをワークテーブル「WK_TBL」へインポートしたいのですがエラーが発生します。(最初の行をフィールド名として使わない) 現在のプログラムは、TransferSpreadsheetを使用してやっているのですが、 「貼り付け先の ' WK_TBL ' テーブルには 'F1' フィールドがありません。」 とエラーが出ます。 そこで、WK_TBLを削除して実行すると一応取り込まれました。 TransferSpreadsheetは既に存在するテーブルに取り込むことができないのでしょうか? ちなみに、既に作成済みである「WK_TBL」には取り込み後使用したいフィールドがあるため、 フィールドが1つ余分にあります。またEXCELの先頭行と「WK_TBL」のフィールド名は一致してません。 例)EXCEL コード 名称 住所 例)WK_TBL Wコード W名称 W住所 Wフラグ

  • Excelワークシートがインポートできない

    Excelのワークシート 拡張子xls ファイルを、Access2010の外部データ - excelワークシートのインポート機能を使ってインポートしようとすると、 "ファイル*****.xlsの情報にアクセスできません。ファイルが存在し、形式が正しいことを確認してください。" というメッセージが現れ、インポートすることができません。 先週までは、同じことを問題なく、実行できていました。異なるのは、インポートするファイル名とファイル内のデータの中身だけで、ファイル構造、形式は同じです。 ちなみに、 ファイル名を変えてみましたが同様のエラーがでます。 また、インポートするxlsファイルをExcelで開いて、古いバージョンで保存、その後、再度そのファイルを開き、元のバージョンで保存すると、正常にインポートできるようになります。 先週、うまくインポートできていたので、その時使ったxlsで試したところ問題なくインポートできました。 ネット検索してみると、同様の質問がいくつかあるようですが、解決策が明記されていません。 どなたか解る方がいらっしゃいましたら、教えてください。

  • アクセスのインポートエラー 続き

    先ほど、質問しました続きです。以下のVBAを作成しましたが、うまくいきません。助言お願いします。 Option Compare Database Private Sub 実行_Click() Dim cat As ADOX.Catalog Dim tbl As ADOX.Table Dim strName As String Dim i As Long strName = "エラー" i = 0 Set cat = New ADOX.Catalog cat.ActiveConnection = CurrentProject.Connection For Each tbl In cat.Tables If tbl.Name = strName Then i = 1 If MsgBox(tbl.Name & "テーブルを削除しますか?", _ vbYesNo) = vbYes Then cat.Tables.Delete tbl.Name MsgBox tbl.Name & "テーブルの削除を完了しました。" End If Next tbl If i <> 1 Then MsgBox strName & "テーブルが存在しません。" Set cat = Nothing End Sub

  • Accessにエクセルからデータをインポートしたい(VBA)

    Access(2000)のVBAでExcel(2000)からデータをインポートしたいと思います。 詳細は以下の通りです。 フォームでコマンドボタンをクリック時にダイアログボックスが開き、ファイルを指定し、該当のシート(シート名はどのファイルも固定)のデータをアクセスのテーブルにインポートしたい。 どうしたらできるのかここ数日悩んでいます。 よい方法がありましたら教えてください。

  • 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

  • ExcelのデータをAccessのテーブルへインポートできない

    Access VBA超初心者です。 Excelのデータの任意の列のデータをAccessの既存テーブルの任意のフィールドへインポートしたいのですが 既存Excelシートの構成は例のようにデータベース形式でないため試行錯誤しています。 Excelシートの構成は1~2行は空行、3行目と4行目にフィールド名がはいっており セルの結合は使われていません。 データは5行目から開始されています。    <例> 列番号 |A列|B列|C列|D列|E列| 3行目 |     季節    |  |   4行目 | 春 |夏 |秋 |冬 |  |   5行目 |aa |bb |100 |200 |300 | まず、以下の手順1と手順2を考えました。 ---------------------------------------------------- ◇目的 上記<例>のE列のデータを既存Accessテーブルにインポートしたい。 ◇Accessの事前準備 フィールド名だけ指定し、レコードは空の状態の[a]テーブルを作成しました。 ◆手順1 AccessからExcelをオブジェクトとして開き、[a]テーブルへ列単位でコピーする() ◆手順2 [a]テーブルから条件にあうレコードを別テーブル[b]のフィールドへインポートする (SQL文) ---------------------------------------------------- まず、手順1のコードをネット検索を参考にして以下のようにしました。 最後に「入力しました」とメッセージが表示されるもののaテーブルにデータがインポートされません。 特にエラーメッセージも表示されません。 どなたか親切にアドバイス頂ける方がいらっしゃいましたらどうぞお願いします。m(__)m ---------------------------------------------------- Public Sub エクセルインポート() Dim xlApp As Object, xlBook As Object, xlSheet As Object, Wcell As Object Set xlApp = CreateObject("Excel.Application") Set xlBook = xlApp.Workbooks.Open("¥Excelファイル保存場所パス\Excelファイル.xls") Set xlSheet = xlBook.Worksheets("Excelシート名") Set Wcell = xlSheet.Range("a1") Dim intNo As Integer Dim cn As New ADODB.Connection Dim rs As New ADODB.Recordset Set cn = CurrentProject.Connection rs.Open "a", cn, adOpenKeyset, adLockOptimistic xlApp.Application.Visible = True intNo = 5 Do Until rs.EOF rs!フィールド名1 = xlApp.Application.Cells(intNo, 1).Value rs!フィールド名2 = xlApp.Application.Cells(intNo, 2).Value rs!フィールド名3 = xlApp.Application.Cells(intNo, 3).Value     ~     rs!フィールド名21 = xlApp.Application.Cells(intNo, 21).Value Loop xlBook.Close xlApp.Visible = False Set xlBook = Nothing rs.Close Set rs = Nothing cn.Close Set cn = Nothing MsgBox "入力しました" End Sub ----------------------------------------------------

  • ACCESS エクセルから インポート

    アクセスは メインテーブルとサブ(サブフォームで入力)からできています。 エクセルのデータは メインの項目名とサブの項目名が入ってます。 エクセルのデータで メインテーブルのキーとなるものは 追加と更新が混在しています。 この状態で エクセルから アクセスのテーブルに インポートする方法がわかりません。 よろしくお願いします。

  • ACCESSでのエクセルインポート時のシート有無の判定について

    ACCESS上でエクセルファイルをインポートするにおいてそのファイルが存在するかの判定用IF文は If Dir("C:\インポートファイル.xls") = "" Then MsgBox "インポートファイル.xlsファイルがありません。" End If でうまくいくのですが インポートファイル.xls ______________________________ /シート2/シート3/シート4/ インポート用EXCELファイルのシート1が無いことを判定するときの設定方法がネットを調べても発見することが出来ませんでした、やり方があるようなら教えてください If Dir("C:\インポートファイル.xls" ※恐らくここに何か追加が必要だとは思うのですが※ ) = "" Then MsgBox "インポートファイル.xlsファイルのシート1がありません。" End If 一度質問を登録したのですが、登録失敗していたので再度質問しました。よろしくお願いします。

  • Access から Excelのシートをインポート時エラー

    Access の既存のテーブルにExcelのスプレッドシートからデータをインポートするため次のコマンドを実行すると、 F1フィールドがない旨のエラーメッセージが表示されます。 DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel9, "アクセスのテーブル名", "インポート元のエクセルファイル名.xls", False ここで、F1フィールドとは何でしょうか。 Excelのシートの1行目にAccessのテーブルの項目名と同名の項目名を挿入しておけば、上のコマンドの最後の引数をTrueにすればインポートは成功します。項目名のないスプレッドシートはインポートできないのでしょうか。 ご存知の方、教えてください。

専門家に質問してみよう