[[20201116104206]] 『マクロでダウンロードしたExcelファイルが開かなax(タカノリ) ページの最後に飛ぶ

[ 初めての方へ | 一覧(最新更新順) | 全文検索 | 過去ログ ]

 

『マクロでダウンロードしたExcelファイルが開かない。』(タカノリ)

マクロでエクセルファイルをダウンロードした後開くコードを下記のように組んでいます。
以下コードです。

****************************************************************

 Ret = URLDownloadToFile(0, MyDLF, MySVF, 0, 0)  'DL実行

   If Ret = 0 Then  'DL成功ならEXCEL起動================
   Cells(1 + Range("V19").Value, 22) = Range("V5").Value 'DLファイル名を記録

   Workbooks.Open Filename:=MySVF 'C:\MyDocument から起動

  With Workbooks(strFLN & ".xls")
     .Worksheets("menu").Range(strCell).Value = strName 'DLしたファイルの決まったセルに文字列を入力
     .RunAutoMacros xlAutoOpen 'DLしたファイルのAuto_Openを実行

  End With
  Exit Sub
   Else
      MsgBox "ダウンロードは失敗しました" 
       End
   End If

*********************************************************************

これが開く場合とそうでない場合があり、対応に苦慮しています。

複数のファイル(どれもマクロ付き)をDLしますが。中には開かないものがあり一度開かなくなると以降、それが続きます。
エラーメッセージは「拡張子が違う、あるいはファイルが破損している可能性がある。」です。
ただし、手動でDLしてみると正常に開きます。

また、PCの環境が変わると、この事象が発生したり、逆に治ったりします。
PCのファイヤーウォールによるアプリケーションの許可を、Excelのところにチェックマークを入れてみても結果は同じです。

何か解決法をアドバイスいただけないでしょうか?

< 使用 Excel:Excel2016、使用 OS:Windows10 >


 >  With Workbooks(strFLN & ".xls")
                ~~↑~

 プログラムの全貌が不明ですが、
 拡張子を「.xls」で決め打ちしているのが問題かもです。

 「.xls」の他に「.xlsx」「.xlsm」「.xlsb」などの可能性があるんですから、
  実際の拡張子に合わせるべきではないですか?

(半平太) 2020/11/16(月) 12:10


確認ですが、
(1)(重複しましたので削除)
(2).RunAutoMacros xlAutoOpen 'DLしたファイルのAuto_Openを実行
 を実行する意図は?
 開いた時に自動で実行されるので、不要では?
 なお、普通はWorkbook_Open()が使われるのでは?
 AutoOpenマクロがなくてもエラーにはならないようですが、意図が分かりません。

(γ) 2020/11/16(月) 12:17


半平太さん レスありがとうございます。excel2003のころ作ったファイルで、そのままずーっと使ってきたもので 今まで .xls で、問題なく動いてきたのでそのままになっています。今はわけあって、システムをいじれないのでダメなんですが、後で、ここの部分だけxlsmでやってみたいと思います。

Yさん 手動で開けばAuto_Openは機能しますが、 workbook.open だけでは動きませんでした。RunAutoMacros を追加してうまくいったので、このコードを長年使用してます。workbook_open のイヴェントプロシージャよりもAuto_Open が安定して動作するので、自分の場合いつもこっちを使っています。
(タカノリ) 2020/11/16(月) 15:32

拡張子を.xlsm に変えてみたとっころ今度はダウンロードしなくなりました。(>_<) もう少し調べます。
(タカノリ) 2020/11/16(月) 16:12

 コメント拝見しました。

 (1)
 xlsファイルを使われるのは結構ですが、
 ダウンロードしたものもすべてxlsなんですか?
 一般的には、殆どがxlsx,xlsmじゃないかと思います。

 (2)
 Auto_Openのほうが安定しているというのは、寡聞にして存じませんでした。
 それは古いタイプとの整合性のために残してある機能、
 というのが一般の理解かと思います。
 (Excel2003などでは逆にWorkbook_Openのほうが安定していないんですかね。
   なお、コードの最初のほうで
     Application.EnableEvents = False
  を実行しています、などということはないですよね。)

 (3)
 ちなみに、両者の比較に関しては、下記が参考になります。
 「ブックが開いた時に自動実行(Workbook_OpenとAuto_Open)」
 https://excel-ubara.com/excelvba4/EXCEL239.html

 | 他のブックのマクロVBAでブックをOpenした時には、
 | Workbook_Openは起動されますが、Auto_Openは起動されません。
 とされています。
 閲覧されている方が誤解してはいけないので、コメントしておきます。

 Excel2003形式のブックが特別なんですかね。
 いずれにしても今回相手にしているのが、xlsm形式だとすると、
 RunAutoMacros xlAutoOpenは余り効果がないと思います。

(γ) 2020/11/16(月) 16:36


 Ret = URLDownloadToFile(0, MyDLF, MySVF, 0, 0) 
 これが成功しているなら、
 Workbooks.Open Filename:=MySVF
 これが失敗するわけないのですが...

 With Workbooks(strFLN & ".xls")

 MySVFとstrFLNはどういう関係ですか?
 Openするとき、WorkBookオブジェクト型の変数にいれればいいのでは?
(´・ω・`) 2020/11/16(月) 16:56

ああ、そうか。納得。
他のブックから実行されたときに、
Auto_Openが自動実行されないからこそ、
RunAutoMacros xlAutoOpen を追加しているわけですか。
普通にWorkBook_Openを使えば、それは必要ないですね。
(γ) 2020/11/16(月) 17:15

Workbooks.Open Filename:=MySVF
 これが失敗するわけないのですが...
 With Workbooks(strFLN & ".xls")

MySVFとstrFLNはどういう関係ですか?

MySVF=フルパス+ファイル名  strFLN =ファイル名です

(タカノリ) 2020/11/16(月) 18:48


 >MySVF=フルパス+ファイル名  strFLN =ファイル名です

 質問1 ファイル名って拡張子含んでますか?含んでませんか?

 質問2 MySVFの拡張子は、なんですか?

 質問3 With Workbooks(strFLN & ".xls") と拡張子つけてますが、MySVFの拡張子と一致してますか?

 質問4 With Workbooks(strFLN & ".xls") は
    なぜパスを指定しないのですか? その意図は?
        Openするとき、パス指定しないとカレントディレクトリから読み込もうとしますが、
    カレントディレクトリは、ファイルのパスと一致していますか?
(´・ω・`) 2020/11/16(月) 18:54

 ごめんなさい 質問4はなしです。無視してください。
 Open とWorkbooksコレクションの指定の話がごっちゃになって、おかしなことになってしまいました。
(´・ω・`) 2020/11/16(月) 18:59

既に指摘があるように、
  Set wb = Workbooks.Open(Filename:=MySVF)
として、wbを使って操作すればよいだけかと思います。
ブック名そのものは操作に不要ですが、
もしブック名が必要なら、wb.Nameで取得できます。

(γ) 2020/11/16(月) 19:10


ですから、問題はMySVFをどう定めているかでしょう。
手作業なのか、URLを元に自動的に作成しているのか、
その説明も必要でしょう。
(γ) 2020/11/16(月) 19:38

ダウンロードそのものが正常にできていないことがあるんですか?
でも0が返るなら正常終了ですよね。
URLDownloadToFileは同期処理のようなので、タイミングの話ではなさそうですね。
環境面のことが要因であれば、それはこちらからは難しいですね。

(γ) 2020/11/16(月) 19:52


コメント返信:

[ 一覧(最新更新順) ]


YukiWiki 1.6.7 Copyright (C) 2000,2001 by Hiroshi Yuki. Modified by kazu.