Este fórum está sendo desativado

Depois de 9 anos, este fórum será desativado. Mas calma.... estamos migrando para uma comunidade no DISCORD. Junte-se a nós.

ENTRAR PARA DISCORD

Tópicos relacionados a códigos VBA, gravação de macros, etc.
  • Avatar do usuário
  • Avatar do usuário
Por marcosuke2
#22862
Fala pessoal!!

Estou numa briga ferrenha para tentar vincular formulas de um (vamos apelidar de "sisteminha") que criei em Excel, numa planilha que serve de banco de dados que se encontra no FTP da empresa onde trabalho. (OBS: esse "sisteminha", todos da empresa utilizarão, e ele deverá se conectar a essa planilha de dados que será alimentado diariamente pelo dpto jurídico. A empresa onde trabalho tem varias filiais e as redes não se conversam, por isso, não dá simplesmente para jogar a planilha dados na rede e endereçar as formulas para lá, o que seria muito mais simples ). Não consegui encontrar nenhum código em que eu conseguisse trazer essas informações desse banco de dados para o "sisteminha", seja no formato tabela dinâmica ou simplesmente buscar esse valor direto nessa planilha de dados, então eis o momento em que um amigo me deu uma idéia.

Nesse "sisteminha" eu poderia criar um objeto que, quando pressionado, acionaria uma macro que faria o download dessa planilha direto do FTP para a pasta TEMP do Windows do computador do usuário, e com isso, eu poderia simplesmente endereçar todos as formulas para essa planilha no TEMP do Windows. Então cada vez que o usuário clicar no objeto (que no caso seria um botãozinho para ativar a macro), a macro faz o download para a pasta temp, sobrepondo a planilha para a mais atual e consequentemente atualizando as informações.

A questão é que já procurei inúmeros lugares por algum código que faça isso, mas não encontro. Infelizmente não manjo muito de VBA, mas preciso me virar com isso a qualquer custo.

Cheguei a encontrar um código que supostamente faz isso (abaixo do post), mas que infelizmente não funcionou, não sei se preenchi errado algum dado do FTP ou se o código realmente não está correto. Alguém poderia me dar uma força?

Segue o código abaixo:

Sub DownFile()

Dim FTP As INet
Set FTP = New INet
With FTP
.Protocol = icFTP
.RemoteHost = "ftp://192.168.0.112/"
.UserName = ""
.Password = ""
.Execute .URL, "Get C:\Users\Renan\Desktop\technique.txt RFL_exportzip_technique.txt"
Do While .StillExecuting
DoEvents
Loop
UploadFile = (.ResponseCode = 0)
End With
Set FTP = Nothing
End Sub
Avatar do usuário
Por PietroFarias
Posts Avatar
#22980
Tenta utilizar o code abaixo. Utilizei ele a um tempo atrás e deu certo para mim. Vê se funciona com você.
Código: Selecionar todos
Option Explicit

Private Const FTP_TRANSFER_TYPE_UNKNOWN     As Long = 0
Private Const INTERNET_FLAG_RELOAD          As Long = &H80000000

Private Declare Function InternetOpenA Lib "wininet.dll" ( _
    ByVal sAgent As String, _
    ByVal lAccessType As Long, _
    ByVal sProxyName As String, _
    ByVal sProxyBypass As String, _
    ByVal lFlags As Long) As Long

Private Declare Function InternetConnectA Lib "wininet.dll" ( _
    ByVal hInternetSession As Long, _
    ByVal sServerName As String, _
    ByVal nServerPort As Long, _
    ByVal sUsername As String, _
    ByVal sPassword As String, _
    ByVal lService As Long, _
    ByVal lFlags As Long, _
    ByVal lcontext As Long) As Long

Private Declare Function FtpGetFileA Lib "wininet.dll" ( _
    ByVal hConnect As Long, _
    ByVal lpszRemoteFile As String, _
    ByVal lpszNewFile As String, _
    ByVal fFailIfExists As Long, _
    ByVal dwFlagsAndAttributes As Long, _
    ByVal dwFlags As Long, _
    ByVal dwContext As Long) As Long

Private Declare Function InternetCloseHandle Lib "wininet" ( _
    ByVal hInet As Long) As Long


Sub FtpDownload(ByVal strRemoteFile As String, ByVal strLocalFile As String, ByVal strHost As String, ByVal lngPort As Long, ByVal strUser As String, ByVal strPass As String)
    
    'Usar como no exemplo abaixo
    'FtpDownload "/TEST/test.html", "c:\test.html", "ftp.server.com", 21, "user", "password"
    Dim hOpen   As Long
    Dim hConn   As Long

    hOpen = InternetOpenA("FTPGET", 1, vbNullString, vbNullString, 1)
    hConn = InternetConnectA(hOpen, strHost, lngPort, strUser, strPass, 1, 0, 2)

    If FtpGetFileA(hConn, strRemoteFile, strLocalFile, 1, 0, FTP_TRANSFER_TYPE_UNKNOWN Or INTERNET_FLAG_RELOAD, 0) Then
        Debug.Print "Conexão realizada com sucesso"
    Else
        Debug.Print "A conexão falhou"
    End If

    InternetCloseHandle hConn
    InternetCloseHandle hOpen

End Sub
Por marcosuke2
#23079
PietroFarias, nem sei como te agradecer. Ainda não fiz o teste com esse código, mas só pela sua iniciativa em ajudar, fico extremamente agradecido!

Muito obrigado!!
Por marcosuke2
#23120
Olá Pietro,

Utilizei o código VBA, configurei com as informações do meu FTP, mas quando mando executar, ele abre aquela caixa de macro para eu selecionar, porém não existe nenhuma macro para ser selecionada. Tem idéia onde posso estar errando?

Abraços!
Avatar do usuário
Por Reinaldo
Avatar
#23132
Uma possibilidade e acessar a rotina proposta a partir de outra rotina passando os parâmetros necessários.
Algo =/- assim
Sub teste()
FtpDownload "/TEST/test.html", "c:\test.html", "ftp.server.com", 21, "user", "password"
End Sub
Avatar do usuário
Por PietroFarias
Posts Avatar
#23174
Olá Marco.

Você deve usar a função que lhe passei da forma que o Reinaldo falou. Copie o algorítimo que passei em um módulo e em outro módulo(pode ser no mesmo, mas é melhor em outro para você visualizar separado) você insere o procedimento:
Código: Selecionar todos
Sub teste()
       FtpDownload "strRemoteFile", "strLocalFile", "strHost", lngPort, "strUser", "strPass"
End Sub
Onde:

strRemoteFile: Endereço do arquivo no caminho FTP. (Exemplo: /TEST/test.html)
strLocalFile: Caminho do arquivo na sua máquina. (Exemplo: c:\test.html)
strHost: Endereço do FTP. (Exemplo: ftp.server.com)
lngPort: Número da porta de conexão. Normalmente é 21
strUser: Usuário de aceso
strPass: Senha do úsuario.
long long title how many chars? lets see 123 ok more? yes 60

We have created lots of YouTube videos just so you can achieve [...]

Another post test yes yes yes or no, maybe ni? :-/

The best flat phpBB theme around. Period. Fine craftmanship and [...]

Do you need a super MOD? Well here it is. chew on this

All you need is right here. Content tag, SEO, listing, Pizza and spaghetti [...]

Lasagna on me this time ok? I got plenty of cash

this should be fantastic. but what about links,images, bbcodes etc etc? [...]

Estamos migrando para uma comunidade no Discord