powered by simpleCommunicator - 2.0.38     © 2025 Programmizd 02
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel не удается скачать файл с интернета
25 сообщений из 34, страница 1 из 2
VBA Excel не удается скачать файл с интернета
    #39498701
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброй ночи, есть макрос который должен скачать файл с интернета, но он этого не делает, а выдает - MsgBox "Ошибка!"
В чем может быть дело?

Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon.dll" _
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 SaveFileFromInternet(FromURL As String, ToPathName As String)

Dim Res As Long
Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)
If Res = 0 Then
MsgBox "Ok!"
Else
MsgBox "Ошибка!"
End If
End Sub

Sub test()
SaveFileFromInternet " https://yastatic.net/morda-logo/i/citylogos/yndxno2-logo-ru.png", "D:\VBA Парсер\logo.png"
End Sub
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498702
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobax012,

https://yastatic.net/morda-logo/i/citylogos/yndxn1-logo-ru.png

предыдущая ссылка не верная.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498708
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

Рискну предположить, что у Вас 32-х битная система, а объявление функции для 64. Попробуйте так:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
Option Explicit

#If VBA7 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon.dll" Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
#Else
Private Declare Function URLDownloadToFile Lib "urlmon.dll" Alias "URLDownloadToFileW" _
    (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
#End If

Sub SaveFileFromInternet(FromURL As String, ToPathName As String)

Dim Res As Long

Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)
If Res = 0 Then
    MsgBox "Ok!"
Else
    MsgBox "Error!"
End If

End Sub

Sub test()

SaveFileFromInternet "https://yastatic.net/morda-logo/i/citylogos/yndxno2-logo-ru.png", "D:\Test\logo.png"

End Sub
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498709
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,

Да, 64 разрядная - проверил все равно Error.
А у Вас работает?
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498710
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

Возможно, пригодится другой способ ( источник ):
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
Sub DownloadFile()

Dim myURL As String
Dim WinHttpReq As Object
Dim oStream As Object

myURL = "https://yastatic.net/morda-logo/i/citylogos/yndxno2-logo-ru.png"
Set WinHttpReq = CreateObject("Microsoft.XMLHTTP")
WinHttpReq.Open "GET", myURL, False, "username", "password"
WinHttpReq.send

myURL = WinHttpReq.responseBody
If WinHttpReq.Status = 200 Then
    Set oStream = CreateObject("ADODB.Stream")
    oStream.Open
    oStream.Type = 1
    oStream.Write WinHttpReq.responseBody
    oStream.SaveToFile "с:\Test\logo.png", 2 ' 1 = no overwrite, 2 = overwrite
    oStream.Close
End If
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498711
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012iMrTidy,

Да, 64 разрядная - проверил все равно Error.
А у Вас работает?

А какой код ошибки возвращает функция?

У меня работает.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498712
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,

Ошибки нет, программа проходит до конца просто выдает MsgBox "Error!" и естественно файл не сохранился.
Сейчас проверю предыдущий код.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498713
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012iMrTidy,

Ошибки нет, программа проходит до конца просто выдает MsgBox "Error!" и естественно файл не сохранился.
Сейчас проверю предыдущий код.

Поменяйте одну строчку, протестируйте и скажите какой номер ошибки:

Код: vbnet
1.
MsgBox "Error: " + Res
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498714
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
iMrTidyBobax012iMrTidy,

Ошибки нет, программа проходит до конца просто выдает MsgBox "Error!" и естественно файл не сохранился.
Сейчас проверю предыдущий код.

Поменяйте одну строчку, протестируйте и скажите какой номер ошибки:

Код: vbnet
1.
MsgBox "Error: " + Res



Вернее так:

Код: vbnet
1.
MsgBox "Error: " & Res
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498715
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,

2 код сработал, на ура, очень благодарен.

По поводу ошибки в моем коде - номер -2146697208
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498718
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012iMrTidy,

2 код сработал, на ура, очень благодарен.

По поводу ошибки в моем коде - номер -2146697208

Если не лень, то можно попробовать для офиса 64bit:

Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
#If Win64 Then
Private Declare PtrSafe Function URLDownloadToFile Lib "urlmon.dll" Alias "URLDownloadToFileA" _
    (ByVal pCaller As LongLong, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As LongLong, _
    ByVal lpfnCB As Long) As LongLong
#Else
Private Declare PtrSafe  Function URLDownloadToFile Lib "urlmon.dll" Alias "URLDownloadToFileA" _
    (ByVal pCaller As Long, _
    ByVal szURL As String, _
    ByVal szFileName As String, _
    ByVal dwReserved As Long, _
    ByVal lpfnCB As Long) As Long
#End If
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498719
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidy,

Ошибка Type Mismatch по строке

Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498720
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobax012iMrTidy,

Ошибка Type Mismatch по строке

Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)

URLDownloadToFile
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498725
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012Bobax012iMrTidy,

Ошибка Type Mismatch по строке

Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)

URLDownloadToFile

Поменяйте тип переменной Res на LongLong.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498726
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidyBobax012пропущено...


URLDownloadToFile

Поменяйте тип переменной Res на LongLong.

Все равно выходит msgbox "Error"
Не пойму, что ему не хватает.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498727
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobax012iMrTidyпропущено...


Поменяйте тип переменной Res на LongLong.

Все равно выходит msgbox "Error"
Не пойму, что ему не хватает.

Кстати теперь новый номер ошибки: 2148270088
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498773
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

все же не очень понял - речь про VB или про VBA? Если VBA, то попробуйте код отсюда: Как скачать файл из интернета по ссылке
Проверено, работает и в 64 и в 32. Если будут ошибки - возможно, проблема не в самом коде.
Если все происходит из VB(а не VBA), то директива определения версии VBA явно лишняя и возможно, сработает такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#If Win64 Then 'для операционных систем с 64-разрядной архитектурой
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _
             ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong
#Else
     'для 32-разрядных операционных систем
        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
#End If
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498823
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

Давайте для начала все же четко поймем параметры системы. Запустите вот этот код и пришлите результат:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
Option Explicit

Sub Test()

Dim si As String

si = "VBA version: "
#If VBA7 Then
si = si & "VBA7"
#Else
si = si & "VBA6"
#End If

si = si & vbNewLine & "Platform: "
#If Win64 Then
si = si & "64 bit"
#ElseIf Win32 Then
si = si & "32 bit"
#End If

MsgBox si

End Sub
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39498826
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

А еще лучше так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Option Explicit

Type SYSTEM_INFO
    wProcessorArchitecture As Integer
    wReserved As Integer
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    wProcessorLevel As Integer
    wProcessorRevision As Integer
End Type

Declare Sub GetNativeSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
Declare Function GetCurrentProcess Lib "kernel32" () As Long

Sub SystemParams()

Dim si As String

si = "Windows: "

If Is64BitProcessor Then
    si = si & "64bit"
Else
    si = si & "32bit"
End If

si = si & vbNewLine & "VBA version: "
#If VBA7 Then
si = si & "VBA7"
#Else
si = si & "VBA6"
#End If

si = si & vbNewLine & "Platform: "
#If Win64 Then
si = si & "64 bit"
#ElseIf Win32 Then
si = si & "32 bit"
#End If

MsgBox si

End Sub

Private Function Is64BitProcessor() As Boolean

Const PROCESSOR_ARCHITECTURE_AMD64 As Integer = 9
Const PROCESSOR_ARCHITECTURE_IA64 As Integer = 6
Dim si As SYSTEM_INFO
' call the API
GetNativeSystemInfo si
' check the struct
Is64BitProcessor = (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64 _
Or _
si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64)

End Function

...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499210
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristBobax012,

все же не очень понял - речь про VB или про VBA? Если VBA, то попробуйте код отсюда: Как скачать файл из интернета по ссылке
Проверено, работает и в 64 и в 32. Если будут ошибки - возможно, проблема не в самом коде.
Если все происходит из VB(а не VBA), то директива определения версии VBA явно лишняя и возможно, сработает такой код:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
#If Win64 Then 'для операционных систем с 64-разрядной архитектурой
    Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" _
            (ByVal pCaller As LongLong, ByVal szURL As String, ByVal szFileName As String, _
             ByVal dwReserved As LongLong, ByVal lpfnCB As LongLong) As LongLong
#Else
     'для 32-разрядных операционных систем
        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
#End If



Да, речь идет о VBA Excel, как написано в теме. Прогнал ваш код, снова ошибка 2148270088.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499212
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
iMrTidyBobax012,

А еще лучше так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
Option Explicit

Type SYSTEM_INFO
    wProcessorArchitecture As Integer
    wReserved As Integer
    dwPageSize As Long
    lpMinimumApplicationAddress As Long
    lpMaximumApplicationAddress As Long
    dwActiveProcessorMask As Long
    dwNumberOrfProcessors As Long
    dwProcessorType As Long
    dwAllocationGranularity As Long
    wProcessorLevel As Integer
    wProcessorRevision As Integer
End Type

Declare Sub GetNativeSystemInfo Lib "kernel32" (lpSystemInfo As SYSTEM_INFO)
Declare Function GetCurrentProcess Lib "kernel32" () As Long

Sub SystemParams()

Dim si As String

si = "Windows: "

If Is64BitProcessor Then
    si = si & "64bit"
Else
    si = si & "32bit"
End If

si = si & vbNewLine & "VBA version: "
#If VBA7 Then
si = si & "VBA7"
#Else
si = si & "VBA6"
#End If

si = si & vbNewLine & "Platform: "
#If Win64 Then
si = si & "64 bit"
#ElseIf Win32 Then
si = si & "32 bit"
#End If

MsgBox si

End Sub

Private Function Is64BitProcessor() As Boolean

Const PROCESSOR_ARCHITECTURE_AMD64 As Integer = 9
Const PROCESSOR_ARCHITECTURE_IA64 As Integer = 6
Dim si As SYSTEM_INFO
' call the API
GetNativeSystemInfo si
' check the struct
Is64BitProcessor = (si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_AMD64 _
Or _
si.wProcessorArchitecture = PROCESSOR_ARCHITECTURE_IA64)

End Function

...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499249
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012снова ошибка 2148270088А что словами-то пишет? Типа Err.Description есть какой-нибудь? Подозреваю, что проблема локальная с доступом к сайту(или даже просто к скачиванию файлов) средствами автоматизации.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499253
iMrTidy
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bobax012,

Попробуйте так:
Код: vbnet
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Option Explicit

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

Sub SaveFileFromInternet(FromURL As String, ToPathName As String)

Dim Res As LongPtr

Res = URLDownloadToFile(0, FromURL, ToPathName, 0, 0)
If Res = 0 Then
    MsgBox "Ok!"
Else
    MsgBox "Error: " & Res
End If

End Sub

Sub test()

SaveFileFromInternet "https://yastatic.net/morda-logo/i/citylogos/yndxno2-logo-ru.png", "D:\Test\logo.png"

End Sub



Если не поможет, то возможно, dll зарегистрирована неправильно, а возможно, и есть проблемы с доступом к ресурсу.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499254
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
The_PristBobax012снова ошибка 2148270088А что словами-то пишет? Типа Err.Description есть какой-нибудь? Подозреваю, что проблема локальная с доступом к сайту(или даже просто к скачиванию файлов) средствами автоматизации.

Я писал выше, ошибки нет, просто ничего не скачивается.
Вот ниже программный код и msgbox.
iMrTidy пишет, что у него работает, но почему же у меня нет, не могу понять.
...
Рейтинг: 0 / 0
VBA Excel не удается скачать файл с интернета
    #39499255
Bobax012
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Bobax012,
...
Рейтинг: 0 / 0
25 сообщений из 34, страница 1 из 2
Форумы / Visual Basic [игнор отключен] [закрыт для гостей] / VBA Excel не удается скачать файл с интернета
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]