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
どこを修正していいのかわからず困っています。
お手数ですが、ご教示をお願いします。
どのコードがエラーが出てますか。
strDocName = "C:\Users\Desktop\aaaa"
これは拡張子がないですが、実際のものかちゃんと拡張子ついてますか。
あと、エクセルブックをインポートするだけなら、
「Excelファイルオープン」のコードは不要です。
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
これが必要かなと思いまいした。
お手数かとおもいますが、よろしくお願いします。
パスワードがかかっていても普通にインポートはできます。
一度、手動でインポートしてみてください。パスワード無しにインポートできると思います。
下記のコードのみで実行してもエラーが出ますか。
出ませんでした。
ありがとうございました。
これで、業務を早くすることができます。
横からすみません。パスワードがかかっているブックをTransferSpreadsheet acImportで取り込もうとすると、
「外部テーブルのフォーマットが正しくありません。」
というエラーになります。パスワードを外すと正常に取り込まれます。
今、確認してみたら、「外部テーブルのフォーマットが正しくありません。」というエラーになりますね。
回答した時に確認はしているはずだし、質問者さんも解決しているようなので、その後仕様変更でもあったのか、環境依存なのでしょうか。
ちなみに、回答時点では Office2019 32bit、現在は Office2019 64bitです。
hatenaさん、返信ありがとうございます。
Workbooks.openで、パスワードを指定してブックを開いた状態で、
TransferSpreadsheetをすると、この時はエラーは発生せずに、
(1) そのままインポート出来たり、
(2) パスワードを聞かれ、パスワードを入力すると、インポート出来たり
します。どういう条件で(1)になるのか(2)になるのかは分かりませんでした。
上記は確認できました。当方のテストでは「(2) パスワードを聞かれ、」ということはないです。
全く同じプログラムを走らせて、ある時はパスワードを聞かれずインポートされ、ある時はパスワードを聞かれるので、戸惑っています。これは、未解明のまま、しばらく放ってあります。
ご確認どうもありがとうございました。