Descargar archivo de Google Drive desde Access

Necesito descargar un archivo mediante VBA de una carpeta compartida en Google Drive desde un botón de un formulario, agradezco al experto que me pueda facilitar una solución.

1 respuesta

Respuesta
3

Martha, puede descargar el archivo (debe estar compartido) conociendo el respectivo link. Le explico con este formulario.

Observe la imagen en fondo amarillo muestro las 2 partes que conforman un archivo de Google Drive. La primera es un valor constante de Google Drive y la segunda, es el ID del documento. Utilizo una API de Windows y una función.

CÓDIGO DEL BOTÓN DESCARGAR

Private Sub DescargarArchivo_Click()
    Dim Url As String
    Dim NombreArchivoLocal As String
    Dim strFijo As String
    If IsNull(Me.ctl_link) Or Me.ctl_link = "" Then
       MsgBox "Se requiere a Url del archivo", vbInformation, "Error"
       Me.ctl_link.SetFocus
       Exit Sub
    End If
    If IsNull(Me.ctlarchivo) Or Me.ctlarchivo = "" Then
       MsgBox "Se requiere el nombre del archivo y la extensión", vbInformation, "Error"
       Me.ctlarchivo.SetFocus
       Exit Sub
    End If
  strFijo = "https://drive.google.com/uc?export=download&id="
  Url = strFijo & extraer_id_google_drive(Me.ctl_link)
  NombreArchivoLocal = CurrentProject.Path & "\DescargaConAPI\" & Me.ctlarchivo
    'Descarga el archivo desde la URL y lo guarda en la ubicación local
  If URLDownloadToFile(0, Url, NombreArchivoLocal, 0, 0) = 0 Then
     MsgBox "Archivo " & Me.ctlarchivo & " descargado con satisfactoriamente", vbInformation, "Le informo"
  Else
     MsgBox "Error... no se descargo el archivo " & Me.ctlarchivo, vbCritical, "Cuidado"
  End If
 

COPIE ESTE CÓDIGO EN UN MÓDULO

Option Compare Database
Option Explicit
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
Public Function extraer_id_google_drive(enlace As String) As String
    Dim pos_ini As Integer
    Dim pos_fin As Integer
    ' Buscar la posición inicial del ID
    pos_ini = InStr(enlace, "/d/") + Len("/d/")
    ' Buscar la posición final del ID
    pos_fin = InStr(pos_ini, enlace, "/")
    ' Extraer el ID del enlace
    extraer_id_google_drive = Mid(enlace, pos_ini, pos_fin - pos_ini)
End Function

Observe que en el ejemplo asigné por simplicidad una ruta fija para la descarga del archivo, en el campo Guardar como se debe indicar el nombre y la extensión que se le asigna al archivo  descargado. Asumo que deben existir otras alternativas, pero esta me ha servido.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas