Страницы: 1
RSS
Открытие Excel файла из интернета по гиперссылке, Открытие Excel файла из интернета по гиперссылке
 
Добрый день.
Всё обыскал, но не нашел ответа на вопрос. Есть таблица, в шапке столбика имеется ссылка на файл в интернете, сформированная формулой ГИПЕРССЫЛКА из значений в разных ячейках. Значения в ячейках меняются, для универсальности таблицы. все файлы в интернете одинаковые по формату. Из открываемого файла копируются данные и вставляются в диапазон под ячейкой ссылкой. Когда открываешь, щелкая мышью и далее руками заполняя, всё хорошо, но долго. Хотел, чтобы макросом обрабатывалась вся эта работа, но никак не получается заставить VBA открыть файл по ссылке. В макросе пока прописана постоянная ссылка. Пользуюсь Офис 2016. Помогите пожалуйста победить эту проблему. Своих знаний не хватает.
 
Цитата
fudze написал:
ссылка на файл в интернете, сформированная формулой ГИПЕРССЫЛКА из значений в разных ячейках
Рекомендую переделать получение гиперссылки с помощью формул, либо в коде объединять из ячеек.
Цитата
fudze написал:
не получается заставить VBA открыть файл по ссылке
Для начала необходимо скопировать на локальный компьютер:
Код
#If Win64 Then
    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
    #If VBA7 Then
        Declare PtrSafe Function URLDownloadToFile Lib "urlmon" Alias "URLDownloadToFileA" (ByVal pCaller As LongPtr, ByVal szURL As String, ByVal szFileName As String, ByVal dwReserved As Long, ByVal lpfnCB As LongPtr) As LongPtr
    #Else
        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
#End If

Sub Загрузка_Часов()
    Dim URL As String, DestinationFolder As String
    Dim OWB As Workbook
    Dim Rng As Range
    Dim C As Integer
    Dim R As Integer
    With ThisWorkbook.Sheets(1)
        R = .Cells(27, 3)
        For C = 2 To 18 Step 4
            URL = "http://www.atsenergo.ru/dload/calcfacthour_regions/202001_VORNEGEN_20_calcfacthour.xls" '.Cells(R, C) '
            DestinationFolder = ThisWorkbook.Path & "\202001_VORNEGEN_20_calcfacthour.xls"
            If URLDownloadToFile(0, URL, DestinationFolder, 0, 0) = 0 Then
                DoEvents
                Set OWB = Workbooks.Open(DestinationFolder)
                Set Rng = OWB.Sheets(1).Range("B9:B32")
                .Range(.Cells(R + 1, C), .Cells(R + 1 + 23, C)).Value = Rng.Value
                OWB.Close
            End If
        Next
    End With
End Sub
 
Oleg Boyaroff, Вроде у меня гиперссылка в ячейке получена с помощью формулы или я не правильно понял? И как можно в коде наименование загружаемого файла объединить из ячеек, если название файла состоит из переменных данных: "\202001_VORNEGEN_20_calcfacthour.xls" - 2020 - год (может поменяться), 01 - месяц (тоже меняется), _VORNEGEN_20_ - код региона (изменяется в каждом столбике), calcfacthour.xls - единственное значение постоянное. Загружаемые по ссылке файлы будут отличаться друг от друга, месяцем, кодом региона и значениями в самом файле.

Добавил шапку в таблицу, для большей наглядности.
Изменено: fudze - 21.05.2020 08:27:58
 
fudze, предлагаю такой вариант. Успехов.
 
Oleg Boyaroff, Огромное спасибо. Всё отлично работает. Успехов вам также.
Страницы: 1
Наверх