[[20201221115413]] 『インターネットからダウンロードしたファイルを開』(フロン) ページの最後に飛ぶ

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

 

『インターネットからダウンロードしたファイルを開く際の警告アラート操作』(フロン)

いつもお世話になっております。

社内イントラからファイルをダウンロードして開くVBAを作成しております。

無知なため試行錯誤しながらなんとかIEの操作部分は作成でき、ファイルのダウンロードまでは実行できるようになりました。

さて、肝心のダウンロードしたファイルを開く際、
「'***ファイル名***.xls'のファイル形式と拡張子が一致しません。
 ファイルが破損しているか、安全ではない可能性があります。
 発行元が信頼できない場合は、このファイルを開かないでください。
 ファイルを開きますか?
  はい(Y) いいえ(N) ヘルプ(H)」
という警告ダイアログが出てしまいます。

社内イントラからダウンロードしたファイルは拡張子がxlsとなっており、
それが原因だとは思うのですが、
どうにかこのダイアログをVBA上で操作し、ファイルを編集可能状態で開くことはかないませんでしょうか?

foregroundwindowをIEからエクセルに切り替えてsend keysで 対応しようといたしましたが、うまくいきませんでした。

どなたかこのダイアログを操作する方法についておわかりになりましたら
ご教示願いたくよろしくお願いいたします。

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


 回答ではありません。 m(__)m

 >ファイルは拡張子がxlsとなっており、

 拡張子がxlsであることは分かりました。

 ・・で、そのファイルの実際のファイル形式は何なのですか? 

 その情報が肝心だと思うんですが?

(半平太) 2020/12/21(月) 13:41


>半平太様

ご指摘ありがとうございます。
お恥ずかしながら、実際のファイル形式がわかりません。

実際のファイル形式を調べる方法があればお教え願えませんでしょうか?
プロパティでは
Microsoft Excel 97-2003 ワークシート (.xls)
となっております。

(フロン) 2020/12/21(月) 13:52


 >実際のファイル形式を調べる方法があればお教え願えませんでしょうか?

 私には分かりません。

 しかし、そこら辺から拾ってきた、得体の知れないファイルならいざ知らず、
 社内イントラからダウンロードしたのに、どんなファイルが分からないと言うのがちょっと理解できないです。

 手作業で「編集可能状態」にして開いて事があるんですよね?
 その時は、どんなデータが展開されたんですか?

(半平太) 2020/12/21(月) 14:09


半平太様

中身は契約情報の一覧表になっております。
(フロン) 2020/12/21(月) 14:12


ダウンロードしてきたファイルの拡張子をCSVにかえてみたところ、
<tag>等の記載があるHTMLコードのようなものが中身ででてきました。
HTMLをエクセル上で出力したもののようです。

(フロン) 2020/12/21(月) 14:17


 推測ですが、ファイル形式はxlsxではないかと思います
 ※当該ファイルを作成するプログラムが古くて、アウトプットを「.xls」で決め打ちしている・・のではないか。

 実験として、当該ファイルの拡張子を「.xls」→「.xlsx」へ変更して、開いてみて貰えませんか?

(半平太) 2020/12/21(月) 14:25


 いったん手動で開いて(ダイアログではいを選択)名前を付けて保存の時に拡張子はなんとなっているだろうか?
 当方ではXLSX、XLSMの拡張子をXLSに変更してEXCEL2016で開いたときに名前を付けて保存で本来の拡張子が表示された。
(ねむねむ) 2020/12/21(月) 14:29

お二方ともありがとうございます。

>半平太様
拡張子をxlsxにするとファイルが開けなくなります。
[Excelでファイル'***ファイル名***.xlsx'を開くことができません。

 ファイル形式またはファイル拡張子が正しくありません。ファイルが破損しておらず、
 ファイル拡張子とファイル形式が一致していることを確認してください
                 (OK)            ]

という表示になり、
OKボタンしかなくなり、無理に開くこともできません。

>ねむねむ様
一度開いて名前を付けて保存の画面を出すと、
ファイルの種類は Webページ (*htm,*html) と出てまいりました。
やはり形式はHTMLなのでしょうか?

(フロン) 2020/12/21(月) 15:33


 >無知なため試行錯誤しながらなんとかIEの操作部分は作成でき、
 >ファイルのダウンロードまでは実行できるようになりました。
 つまり、実際にはファイルのダウンロードはできておらず、
 表示しているHTMLページを保存したとうことなのでは?

 ダウンロード部分のコードをここに書いて、検証してもらったほうがいいと思います。

 また、マクロでダウンロードした(と思っている)ファイルと、
 手動でダウンロードしたファイルを比較してみたらどうでしょうか?
(´・ω・`) 2020/12/21(月) 15:54

>(´・ω・`)様

ありがとうございます。
ダウンロードをした(とおもっているもの)と手動でダウンロードしたファイルは同一です。

手動でダウンロードしても、拡張子のダイアログはでてきます。

また、マクロを実行してでてきたダイアログの「はい(Y)」を手動で押すとファイルは開かれるので、
ダウンロードはできている(とおもっています)

一応ダウンロードのところはこのように書いております。

  For Each tmp5 In objIE.document.getElementsByTagName("input")

      If tmp5.Value = "Excel出力" Then
     tmp5.Click
       Exit For
      End If
    Next

ダイアログが出てくるところの操作が方法がわかれば…と思ったのですが…
なかなか難しそうですね。

皆さまありがとうございます。
引き続きお知恵を拝借できればと思っております。
(フロン) 2020/12/21(月) 17:24


フロンさま

 正確な状況を再現できないので確信のある回答ではありませんが、「DisplayAlerts = False」にしてファイルが開くまで待機するという方法で解決できないでしょうか。
 適当なテキストファイルの拡張子を変更して同じ警告がでるようにして試してみましたが、下記マクロを実行中に手動でファイルを開いても警告は出ませんでした。

    Sub TEST()

    Application.DisplayAlerts = False

    Do Until ActiveSheet.Range("A1") <> ""
        Application.Wait Now + TimeValue("00:00:01")
        DoEvents
    Loop

    End Sub

(ひいらぎ) 2020/12/21(月) 21:44


ひいらぎさま

ありがとうございます。

教えてくださったとおりのコードを実行中に
イントラ上で手動で出力したエクセルは警告が出ずに開くことができました。
ただ、読み取り専用なのでそのままではアクティブシートにならず(ならないという解釈でよろしいですよね?)
シートの読み込みが完了したところで
オブジェクト変数またはwithブロック変数が設定されていません。
というエラーが出ます。

また、ただ単に今書いている出力するマクロにdisplayareats=falseをいれても
うまくはいきませんでした。

本来なら全コードを明記してここでご教示いただきたいところなのですが、
社内イントラからの契約情報ということで、そのページにたどり着くまでのコードを
明示することが難しく、なかなか歯がゆい限りです。

たとえば警告のダイアログをオブジェクトとして扱うことはできないのでしょうか?

(フロン) 2020/12/22(火) 09:48


 html らしいと分かったなら、それに合わせて拡張子を変更してから「普通に」開くのが本筋だと思うのですがねぇ。。

 Sub changeXLS2HTML()
     Dim fso As Object
     Dim filePath As String
     Dim f As Object

     Set fso = CreateObject("Scripting.FileSystemObject")
     filePath = "C:\Users\ユーザー名\Downloads\XXXX.xls" ' 変更するファイルのフルパス

     Set f = fso.GetFile(filePath) ' ファイルの取得
     f.Name = fso.GetBaseName(f.Path) & ".html" ' 変更後の拡張子
 End Sub

(半平太) 2020/12/22(火) 10:45


半平太様

おっしゃる通りだと思います。
ですがhtmlで開くとブラウザが立ち上がりますよね。

落としてきたエクセルをそのあと加工する必要があるので、
エクセルとして開きたいのです。

ブラウザ上ではそのようなことが…
と思いましたが、
考えてみたら立ち上がったブラウザ上の全データをコピーして
新シートを立ち上げて貼り付ければよいのかもしれません。

ワンクッション増えますが、
htmlでテーブルとして出てきていますので、それを加工する方向で試行錯誤してみます。

本当にありがとうございました。

(フロン) 2020/12/22(火) 11:17


 >ですがhtmlで開くとブラウザが立ち上がりますよね。

 何か話が食い違っていませんか?

 当初はこうだったですよね?
     ↓
 >「'***ファイル名***.xls'のファイル形式と拡張子が一致しません。
 > ファイルが破損しているか、安全ではない可能性があります。
 > 発行元が信頼できない場合は、このファイルを開かないでください。
 > ファイルを開きますか?

 htmlなら、ファイル形式と拡張子が一致しているので、普通にエクセルで開けるんじゃないですか?

(半平太) 2020/12/22(火) 11:25


お客さまのSAPからダウンロードするファイルに似た状況なのでファイル形式の参考になれば。
そのxlsファイルはExcel2003では開くのに時間が掛かります。(元々サイズが大きいですか)
Excel2010ではメッセージが表示され、はいを選択すると、通常のブックファイルと同じ位の時間+α程度で開きます。
2003、2010で名前を付けて保存時のファイルの種類は、単一ファイルwebページ(*.mth;*.mhtml)となります。
バイナリエディタで見るとと先頭は MIME-Version: 1.0 です。
拡張子をhtmlに変更してブラウザで開くと、先頭に
MIME-Version: 1.0 X-Document-Type: Worksheet Content-Type: multipart/related;
と表示されます。
純粋なエクセルファイルではないですが、先方はエクセルファイルだ、と言っています。
(cai) 2020/12/22(火) 11:29

半平太様

確かに拡張子は一致するはずですが、
拡張子をhtmlにすると、ウェブブラウザが立ち上がりテーブルとして現れます。

逆にhtmlの拡張子をxlsにするとエクセルで開ける、ということを知りました。
https://railtown.hatenadiary.org/entries/2008/04/23

それをいかにエクセルとして加工したいかを考えておりますので、
もう警告ダイアログを操作できないのであれば、
半平太様に教えていただいた通り、拡張子を変更してからの作業するしかないかなと思っております。

cai様
ありがとうございます。
私も同じ状況のようです。

>Excel2010ではメッセージが表示され、はいを選択すると、通常のブックファイルと同じ位の時間+α程度で開きます。
その、はい を選択する動作をどうにかできればいいと思っているのですが、
なにか知見をご教示くだされば幸いです。

よろしくお願いいたします。

(フロン) 2020/12/22(火) 11:49


 >確かに拡張子は一致するはずですが、
 >拡張子をhtmlにすると、ウェブブラウザが立ち上がりテーブルとして現れます。

 ここが分からないです。

 エクセルでそのファイルを開くんですよ。
 まさかダブルクリックで開いているんじゃないでしょうね。

 エクセルの「ファイル」→「開く」からそのファイルを指定して開くんですけど。
 それでまともに開くことが出来れば、その手順をコード化すればいい、と言う流れになります。

(半平太) 2020/12/22(火) 12:35


半平太様

私ものすごい勘違いをしておりました!
大変失礼いたしました!

普通にエクセルで開けました!

その方向性がわかればできそうです!

本当にありがとうございました!
(フロン) 2020/12/22(火) 13:18


>半平太様

無事にやりたいことができるようになりました。
本当にありがとうございました。

御礼まで。

(フロン) 2020/12/22(火) 17:21


コメント返信:

[ 一覧(最新更新順) ]


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