アプリ版:「スタンプのみでお礼する」機能のリリースについて

タイトルの通りですが、VBAでダウンローダーを作りたいので教えてください。
某サイトのSWFファイル(連番)をダウンロードします。
For i = 1 To 20 の後から「13 型が一致しません。」と出てデバッグ画面になりますがどこを直せばよいでしょうか?

Option Explicit
Private Declare Sub sleep Lib "kernel32" Alias "Sleep" (ByVal ms As Long)
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 startd1()
Dim lngRes As Long
Dim strURL As String
Dim strPath As String

Dim i As Long
Dim VOLname As Long
Dim IMGname As Long

VOLname = InputBox("Which volume,", "Input that volume number", 0)
IMGname = 1

For i = 1 To 20

strPath = "C:\Users\aaa\download\vol" & VOLname & "\" & IMGname & ".swf"
strURL = "https://bbb.com/vol" & VOLname & "/ccc/" & IMGname & ".swf"

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

sleep 3000

If lngRes = 0 Then
MsgBox "ダウンロード完了!"
MsgBox IMGname
Else
MsgBox "ファイルをダウンロードできませんでした"
MsgBox IMGname

End If

IMGname = IMGname + 1
Next i
End Sub

A 回答 (1件)

こんにちは


>For i = 1 To 20 の後から「13 型が一致しません。」
型のエラーが返される可能性としてAPIがbitバージョンの違いで
エラーになっているのではないでしょうか?

これは、環境が分からないので合っていないかもですが、
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

Public Declare 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
のようにすると結果はどうでしょう。

また、ご質問部分ではありませんが、
Dim VOLname As Long
VOLname = InputBox("Which volume,", "Input that volume number", 0)
ここにはおそらく問題があります。
キャンセルボタンを押した時エラーが返されると思います。
また、Long型では対応できないのでStringで受け、
If StrPtr(VOLname) = 0 Then Exit Sub ’キャンセル時終了
If IsNumeric(VOLname) Then 数値ならば、、、
みたいにする必要があると思います。

もしくは、Application.InputBoxメソッドを使用してType:=1に設定するとか、方法がありますが、、、

ただ、後にパスに入れるのでStringで良いような。。

ご質問以外の部分なので、この辺りはご自身で調べてみてくださいね。
    • good
    • 0
この回答へのお礼

やってみます

ご回答ありがとうございます。
PtrSafe Functionは64bit版の書き方なのですね。
直してみてエラーなく動き始めましたが、次はセキュリティの問題なのか、ダウンロードしたファイルが見当たらない問題に当たっています。
下の追記も含めいろいろ試してみます。ありがとうございました!

お礼日時:2021/05/18 20:21

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