Вводные: У меня есть 2 надстройки - New One.xlam (- служит для всех макросов) - AutoUpdate.xlam (только для обновления New One.xlam)
Самостоятельно разобраться в автообновлении не смог, поэтому сделал по кнопке.
Как работало: Скачанный гугл диск - автообновление файла New One.xlam на нем из папки Addins (синхронизация папки) - кнопка прожимается у коллеги - отключается надстройка - скачивается файл с гугл диска - добавляется в надстройки - включается. Процесс завершен
Сейчас же происходит очень неприятная история: файл с гугл диска загружается битым. Его вес ~152кб, а загружается через макрос → вес в 2кб. Причины понять не могу.
Скачиваю по ссылке из макроса, вставляя ее в браузер - все нормально вес ~152кб, VBA не ругается. Других способов автообновления собственной надстройки не знаю.
Sub DownloadAndInstallAddInW()
' Your code here to download the latest Add-In version
Dim downloadURL As String
'Application.AddIns("New One").Installed = False
downloadURL = "https://drive.google.com/uc?export=download&id=1-_XQWIJVgMUFU253id1d_dn8PlHfb5X-" ' Replace with the actual download URL
' Specify the local path for saving the downloaded Add-In
Dim localPath As String
localPath = Environ("USERPROFILE") & "\Desktop\New One.xlam" ' Replace with your desired local path
' Download the Add-In
DownloadFileW downloadURL, localPath
'Call Add_AddinW
MsgBox "Надстройка успешно обновлена!"
End Sub
' Function to download a file from a URL
Sub DownloadFileW(url As String, localPath As String)
Dim WinHttpReq As Object
Set WinHttpReq = CreateObject("WinHttp.WinHttpRequest.5.1")
WinHttpReq.Open "GET", url, False
WinHttpReq.Send
If WinHttpReq.Status = 200 Then
Dim oStream As Object
Set oStream = CreateObject("ADODB.Stream")
oStream.Open
oStream.Type = 1
oStream.Write WinHttpReq.ResponseBody
oStream.SaveToFile localPath, 2 ' 1 = no overwrite, 2 = overwrite
oStream.Close
Else
MsgBox "Failed to download the Add-In. Status: " & WinHttpReq.Status
End If
End Sub
Sub Add_AddinW()
If Application.AddIns("New One").Installed = True Then
Application.AddIns("New One").Installed = False
With Application
.AddIns.Add Environ("USERPROFILE") & "\Desktop\New One.xlam", True
End With
End If
If Application.AddIns("New One").Installed = False Then
Application.AddIns("New One").Installed = True
End If
End Sub
В чем может быть причина? Может можно как-то оптимизировать автообновление? Как лечить подобную ситуацию и с чем вообще возникает проблема? Заранее спасибо гуру за советы
У вас не файл загружается, а текст с сообщением об ошибке / какой-то HTML код Вот этот скачанный файл размером 2кБ откройте в Блокноте, и посмотрите что там написано.
Сейчас вы не можете просматривать и скачивать этот файл.
В последнее время этот файл слишком часто просматривался или скачивался. Повторите попытку позже. Если файл очень большой или доступен большому числу пользователей, возможен отказ в доступе к нему в течение ближайших суток. Если через 24 часа ситуация не изменится, обратитесь к администратору домена.
написал: У вас не файл загружается, а текст с сообщением об ошибке / какой-то HTML кодВот этот скачанный файл размером 2кБ откройте в Блокноте, и посмотрите что там написано.
Ага, вот где собака зарыта... Значит, надо искать обходной вариант гугл диска... Пока что нет представления, где можно разместить файл, чтобы сделать автообновление. VBA может забрать только с прямой ссылки для скачивания, насколько осведомлен... DropBox в России неисправен, Yandex-Disk не дает прямых ссылок, OneDrive теперь тоже нельзя так использовать... Уже начал терять надежду
Wadee, попробуйте прогу HFS, может быть, помню раньше была эта прога, там можно было расшаривать свои файлы в веб (как-то через внешний серер), если не ошибаюсь. Но я не специалист, каеш сразу говорю.. )
В общем, пока что только гугл с периодическими отваливаниями =( Если у кого-то есть еще жизнеспособные варианты, будет отлично. Насколько помню, у Николая Павлова надстройка сама понимает какая версия. Кто знает, как это чудо реализовано? Хотелось бы иметь такую же возможность - проверка версии, если есть более новая - скачивает