Microsoft Access 掲示板

ACCESSのVBAを利用して、Excelの内容をインポートする

9 コメント
views
4 フォロー

ACCESS2016,Windows10を利用しています。

PW付のExcelの内容を、ACCESSからインポートしたいと考えています。
下記にコードを作成しました。

Private Sub コマンド10_Click()

    Dim strDocName As Variant
    Dim oApp As Object

    strDocName = "C:\Users\Desktop\aaaa"

    Set oApp = CreateObject("Excel.Application")

    'Excelファイルオープン
    With oApp
        .Visible = True
        .Workbooks.Open FileName:=strDocName, _
         Password:="abcd"

        .ActiveWorkbook.Close False
        .Quit
    End With
    Set oApp = Nothing

    'Excelインポート
     DoCmd.TransferSpreadsheet acImport, "MT_test",strDocName , True, "Sheet1!W4:AF200"
End Sub

発生するエラーは、実行エラー13 型が一致しません。

テーブルの型に関しては下記のコードでACCESSへ書き込みできていますので、問題ないと思います。

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "MTtest",
"C:\Users\Desktop\aaaa", True, "Sheet1!W4:AF200"
End Sub

どこを修正していいのかわからず困っています。
お手数ですが、ご教示をお願いします。

hideki
作成: 2021/01/17 (日) 12:02:36
通報 ...
1

どのコードがエラーが出てますか。

strDocName = "C:\Users\Desktop\aaaa"
これは拡張子がないですが、実際のものかちゃんと拡張子ついてますか。

あと、エクセルブックをインポートするだけなら、
「Excelファイルオープン」のコードは不要です。

2
hideki 2021/01/17 (日) 13:36:05 592ec@58077

strDocName = "C:\Users\Desktop\aaaa.xlsx"です。
失礼しました。
エラーの箇所は、
DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "MTtest",
"C:\Users\Desktop\aaaa.xlsx", True, "Sheet1!W4:AF200"

です。

元ファイルのExcelにはPWがかかってまして、

   With oApp
        .Visible = True
        .Workbooks.Open FileName:=strDocName, _
         Password:="abcd"

        .ActiveWorkbook.Close False
        .Quit
    End With
    Set oApp = Nothing

これが必要かなと思いまいした。

お手数かとおもいますが、よろしくお願いします。

3

パスワードがかかっていても普通にインポートはできます。
一度、手動でインポートしてみてください。パスワード無しにインポートできると思います。

下記のコードのみで実行してもエラーが出ますか。

DoCmd.TransferSpreadsheet acImport, acSpreadsheetTypeExcel12Xml, "MTtest", "C:\Users\Desktop\aaaa.xlsx", True, "Sheet1!W4:AF200"
4
hideki 2021/01/17 (日) 17:29:29 592ec@58077

出ませんでした。
ありがとうございました。
これで、業務を早くすることができます。

5
kitasue 2022/03/16 (水) 11:50:16 72148@12e91

横からすみません。パスワードがかかっているブックをTransferSpreadsheet acImportで取り込もうとすると、
「外部テーブルのフォーマットが正しくありません。」
というエラーになります。パスワードを外すと正常に取り込まれます。

パスワードがかかっていても普通にインポートはできます。
って本当ですか?

6

今、確認してみたら、「外部テーブルのフォーマットが正しくありません。」というエラーになりますね。
回答した時に確認はしているはずだし、質問者さんも解決しているようなので、その後仕様変更でもあったのか、環境依存なのでしょうか。

ちなみに、回答時点では Office2019 32bit、現在は  Office2019 64bitです。

7
kitasue 2022/03/17 (木) 08:36:06 72148@12e91

hatenaさん、返信ありがとうございます。
Workbooks.openで、パスワードを指定してブックを開いた状態で、
TransferSpreadsheetをすると、この時はエラーは発生せずに、
(1) そのままインポート出来たり、
(2) パスワードを聞かれ、パスワードを入力すると、インポート出来たり
します。どういう条件で(1)になるのか(2)になるのかは分かりませんでした。

8

Workbooks.openで、パスワードを指定してブックを開いた状態で、
TransferSpreadsheetをすると、この時はエラーは発生せずに、
(1) そのままインポート出来たり、

上記は確認できました。当方のテストでは「(2) パスワードを聞かれ、」ということはないです。

9
kitasue 2022/03/18 (金) 12:17:44 72148@12e91

全く同じプログラムを走らせて、ある時はパスワードを聞かれずインポートされ、ある時はパスワードを聞かれるので、戸惑っています。これは、未解明のまま、しばらく放ってあります。
ご確認どうもありがとうございました。