教えて!gooにおける不適切な投稿への対応について

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

エクセルVBAを使用し色々と試しているのですが
うまく回らなく質問させて頂きます。

記述している内容は下記ですが,ネットで拾い集め記述していますが
画像が保存されません。URL自体に誤りはないため"ダウンロード完了!"と表示は出ますが
実際にダウンロードはされてない状態です。

記述に誤りが無いか,お教え頂ければと思います。

Option Explicit
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
(ByVal pCaller As Long, _
ByVal szURL As String, _
ByVal szFileName As String, _
ByVal dwReserved As Long, _
ByVal lpfnCB As Long) As Long

Sub Download_File()
Dim lngRes As Long
Dim strURL As String
Dim strPath As String

strPath = "C:\"
strURL = "https://www.google.com/images/branding/googlelog …

lngRes = URLDownloadToFile(0, strURL, strPath, 0, 0)
If lngRes = 0 Then
MsgBox "ダウンロード完了!"
Else
MsgBox "ファイルをダウンロードできませんでした"
End If
End Sub

実際にはここへWSHを用いてデスクトップに保存できるように
するつもりでもあります。宜しくお願い致します。

環境:Win10 Enteprise
   Office 2016

gooドクター

A 回答 (5件)

>strPath = "C:\" 


通常、Win10の設定で、Cドライブ直下に管理者設定などをしないで、ダウンロードは出来ないと思います。
合わせて、WindFaller氏の回答にあるようにファイル名が必要です。

>"ダウンロード完了!"と表示は出ます
抜粋:ファイルを作成できず、ダウンロードがキャンセルされた場合でも、 URLDownloadToFileは S_OKを返します。

Cドライブ直下を変更した例
例場合、対象がjpgと明確なので、拡張子をjpgにしています。
デスクトップにTest.jpgがダウンロードされます。
strPath = CreateObject("WScript.Shell").SpecialFolders("Desktop") & "\Test.jpg"
strURL = "http://arch.casio.jp/image/dc/images/fh20_galler …
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。ご回答ありがとう御座います!

お礼日時:2020/03/20 15:49

lngRes = URLDownloadToFile(0, strURL, strPath, 0, 0)


strPath とは書いても、そこは、ファイル名付きのはずですね。
StrRev あたりでファイル名は取得するか、日付ファイル名とかにするか、それは考えてください。

VBAでは、\\は不要です。

> 実際にはここへWSHを用いてデスクトップに保存できるように
それは、また厄介なことでしょうけれども、とりあえず、それは別の話でしょう。
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。ご回答ありがとう御座います!

お礼日時:2020/03/20 15:49

"C:\"に保存できないのでドキュメントフォルダに保存されてませんか?


C:\以外の
strPath = "C:\○○"
で試してみては?
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。ご回答ありがとう御座います!

お礼日時:2020/03/20 15:49

こちらを見ると、



MSDN - URLDownloadToFile function
https://msdn.microsoft.com/ja-jp/windows/ms77512 …

ダウンロード成功時の返り値は「S_OK」だそうなので、

If lngRes = S_OK Then
MsgBox "ダウンロード完了!"

として見るとか。


また、英文のテキストはよう読みませんが、ファイルが作れない時、ダウンロードがキャンセルされた時もS_OK出すように読めるので、

strPath = "C:\test.txt"

と、具体的なファイル名を指定しては。
あるいは、VBで良くあるけど、\はエスケープシーケンスだと解釈されるので、"c:\\test.txt"とかでなきゃマズイとかって事もあるかも?
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。ご回答ありがとう御座います!

お礼日時:2020/03/20 15:49

一応お試しください


URLの最後の「%22」を削除したらどうなりますか?
またCドライブ直下ではなくフォルダを作成してそこにダウンロードしてもダメですか?
    • good
    • 0
この回答へのお礼

お礼が遅くなりました。ご回答ありがとう御座います!

お礼日時:2020/03/20 15:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

gooドクター

このQ&Aを見た人がよく見るQ&A

人気Q&Aランキング