Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 11 Home : その他)
エクセルファイルのエクスポートのエラー
投稿日時: 23/04/30 11:53:28
投稿者: Watanabe-45

2台のPCでACCESSファイルを使用しています。
以前は問題なく動いていたのですが、1台のPCで動かすと途中でエラーがでて途中で止まってしまいます。
原因や修正の方法がわからないためご教授いただだきたくお願いいたします。
 
1台目PCの環境:ACCESS365、Excel365
2台目PCの環境:ACCESS2010、Exce2019
 
エラーが発生するPCは常に2台目PCのみです。
 
メッセージ
実行時エラー3274
外部テーブルのフォーマットが正しくありません。
 
エラーが発生する場所は、常にこの部分で発生します。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"
 
Private Sub コマンド184_Click()
 
Path = Application.CurrentProject.Path
 
    Set xlsApp = CreateObject("Excel.Application")
    Set wkBook = xlsApp.Workbooks.Open(Path & "\" & "エスポート先エクセルファイル名" & ".xlsm")
     
    xlsApp.DisplayAlerts = False
    wkBook.Worksheets("エクセルポート先エクセルシート1").Activate
    wkBook.Worksheets("エクセルポート先エクセルシート1").UsedRange.ClearContents
    wkBook.Worksheets("エクセルポート先エクセルシート2").Activate
    wkBook.Worksheets("エクセルポート先エクセルシート2").UsedRange.ClearContents
    wkBook.Worksheets("エクセルポート先エクセルシート3").Activate
    wkBook.Worksheets("エクセルポート先エクセルシート3").UsedRange.ClearContents
    wkBook.Worksheets("エクセルポート先エクセルシート4").Activate
    wkBook.Worksheets("エクセルポート先エクセルシート4").UsedRange.ClearContents
    wkBook.Worksheets("エクセルポート先エクセルシート5").Activate
    wkBook.Worksheets("エクセルポート先エクセルシート5").UsedRange.ClearContents
    wkBook.Save
    wkBook.Close
    xlsApp.DisplayAlerts = True
     
    Set wkBook = Nothing
    Set xlsApp = Nothing
 
 
Path = Application.CurrentProject.Path
 
srchXls = Path & "\" & "エスポート先エクセルファイル名" & ".xlsm"
 
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ1", srchXls, True, "エクセルポート先エクセルシート1"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ2", srchXls, True, "エクセルポート先エクセルシート2"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ4", srchXls, True, "エクセルポート先エクセルシート4"
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ5", srchXls, True, "エクセルポート先エクセルシート5"
 
MsgBox "Excelへエクスポートしました。"
End Sub

回答
投稿日時: 23/04/30 12:27:44
投稿者: taitani
投稿者のウェブサイトに移動

質問です。
Q1.エクスポート先のエクセルファイルの拡張子は「xlsm」である必要の理由は何でしょうか。
→xlsx であれば、発生しない可能性があります。
 
Q2.Office互換性パック (2台) のインストールは可能でしょうか。
→会社の PC などであれば、管理者にご相談を。
 
 

投稿日時: 23/05/03 15:03:08
投稿者: Watanabe-45

タイタニさん
 
ご回答いただきありがとうございます。
Q1.「xlsm」である理由ですが、アクセスエクスポートデータ以外の部分で、一部をVBA処理するための仕様となります。
Q2.管理者にも確認しましたが、office parsonal2019と単体のaccess2010となります。

回答
投稿日時: 23/05/07 14:36:54
投稿者: taitani
投稿者のウェブサイトに移動

Watanabe-45 さん
ご回答ありがとうございます。
拡張子の変更ができないんですね。
私の環境では動作検証ができなかったので、他の方の回答を待つか、Microsoft へ質問を行ってみてはいかがでしょうか。
回答ができずすみません。

回答
投稿日時: 23/05/08 07:36:29
投稿者: WinArrow
投稿者のウェブサイトに移動

引用:
エラーが発生する場所は、常にこの部分で発生します。
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"

 
この説明は、「3番目のシート」のところでエラーが発生している
と受け取ることができます。
ということは、1番目、2番目のシートではエラーになっていないと読めます。
 
1番目、2番目のシートと3番目のシートに違う部分があるのではないか
と思われます。例えば、結合セルが存在しているとか・・・・
 
確認してみてください。

回答
投稿日時: 23/05/08 10:00:36
投稿者: WinArrow
投稿者のウェブサイトに移動

前レスでは、シート側に問題があるように書きましたが、
 
実行時エラー3274
で、WEB検索してみるとよいでしょう。
バージョンの違いなどもありそうなので参考するとよいでしょう。

回答
投稿日時: 23/05/08 11:16:03
投稿者: Suzu

Watanabe-45 さんの引用:

Q1.「xlsm」である理由ですが、アクセスエクスポートデータ以外の部分で、一部をVBA処理するための仕様となります。
Q2.管理者にも確認しましたが、office parsonal2019と単体のaccess2010となります。

 
Access2010、TransferSpreadsheetは上書きできないのが仕様
https://excelshogikan.com/tips/tips220.html
 
Access 2010 では、既存のファイルに書き出せない様です。
 
テストとして、エクスポート先に、存在しないファイルを指定し実行してみるとどうなるでしょう?
 
エラーとならないなら、既にファイルが存在しているのでエラーとなっている。
 
 
エラーとなってしまうなら
 
引用:
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"

 
TransferSpreadsheet の第2引数 SpreadsheetType
 
について、
AcSpreadSheetType 列挙型 (Access)
https://learn.microsoft.com/ja-jp/office/vba/api/access.acspreadsheettype
 
acSpreadsheetTypeExcel12Xml
10
Microsoft Excel 2010/2013/2016 XML 形式 (.xlsx、.xlsm、.xlsb)
 
となっています。
 
更に 2010形式の
acSpreadsheetTypeExcel12    9    Microsoft Excel 2010 形式
 
があります。
 
2010までは、acSpreadsheetTypeExcel12 を指定し
2013以降の 開発時に、acSpreadsheetTypeExcel12Xml が追加された 可能性もあります。
 
Access2010 のマシンで
テスト として、
 
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12Xml, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"
 
acSpreadsheetTypeExcel12Xml はそのまま。
エクスポート先に、xlsm ファイルではなく、xlsxファイルパスを指定し実行してみましょう。
ここでエラーになるのであれば、Access2010 には acSpreadsheetTypeExcel12Xml の引数が
存在しないのでエラーになっていると思われます。
 
 
 
DoCmd.TransferSpreadsheet acExport, acSpreadsheetTypeExcel12, "エクセルポート元クエリ3", srchXls, True, "エクセルポート先エクセルシート3"
 
・acSpreadsheetTypeExcel12 を指定 / エクスポート先に、存在しない、xlsmファイルパス指定
・acSpreadsheetTypeExcel12 を指定 / エクスポート先に、存在している、xlsmファイルパス指定
 
を実行し、動作確認を行い原因を確認しましょう。

トピックに返信