Pergunta : Using wininet.dll com código do vba dentro do macro de Excel 2003 no usuário R2 das janelas 2008. O ftp pendura

Nós estamos usando o a relação de programação da aplicação do Internet de Windows (WinINet) (wininet.dll) com o seguinte código de VBA em Microsoft Excel 2003 que funciona no usuário R2 terminal do usuário 2008 de Windows.  Pendura por 20-45 segundos após ter executado a linha blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) mas ainda termina o ftp põr.  Em nosso Windows Xp /2003 fazem à máquina o ftp põr funcionamentos instantaneamente e não fazem lngINet não ofuscante do
do
de hang.
como o lngINet de Long
= o
de InternetOpen (“ServerName”, 1, vbNullString, vbNullString, 0) escurecem o lngINetConn como o
do lngINetConn de Long
= do
de InternetConnect (lngINet, usuário, 0, usuário, pwd, 1, 0, 0) escurecem o blnRc como o blnRc do
do blnRc de Boolean
= do
de FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) = do
de FtpDeleteFile (lngINetConn, registro do ) blnRc =
de FtpDeleteFile (lngINetConn, rejeições do ) o blnRc = do
de FtpDeleteFile (o lngINetConn, raciocina) o lngINet
do lngINetConn
InternetCloseHandle do

InternetCloseHandle não sure se faz uma diferença mas o usuário ele são FTPing a são um rel= " nofollow " do” _blank”” do target= de " http://msdn.microsoft.com/en-us/library/aa383630(v=VS.85).aspx do href= do
de Sun Solaris 10 box.
> o en-us/library/aa383630 de http://msdn.microsoft.com/ (v=VS.85) .aspx
class= do

Resposta : Using wininet.dll com código do vba dentro do macro de Excel 2003 no usuário R2 das janelas 2008. O ftp pendura

Aqui você tem uma versão prolongada de FtpPutFile… (FtpPutFileEx) método feito sob encomenda que pode calcular a informação do byte para o progresso assim como mensagens da bomba ao UI.

Uso:
 FtpPutFileEx “ftp.server.com”, “usuário”, “passagem”, “c:\windows\system32\calc.exe”,” /TEST/calc.exe "

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:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
Opção explícita
'egl1044
Const confidencial BUF_SIZE = amortecedor do defeito 4096 '4KB para o ftp
 
Const confidencial INVALID_HANDLE_VALUE = (- 1)
Const confidencial OPEN_EXISTING = &H3&
Const confidencial GENERIC_READ = &H80000000
Const confidencial GENERIC_WRITE = &H40000000
Const confidencial INTERNET_OPEN_TYPE_PRECONFIG = 0
Const confidencial INTERNET_SERVICE_FTP = 1
Const confidencial INTERNET_DEFAULT_FTP_PORT = 21
Const confidencial FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Confidencial declarar o liberal “kernel32” de CreateFileW da função (lpFileName de ByVal como dwDesiredAccess por muito tempo, de ByVal como o dwShareMode por muito tempo, de ByVal como lpSecurityAttributes por muito tempo, de ByVal como o dwCreationDisposition por muito tempo, de ByVal como dwFlagsAndAttributes como por muito tempo, ByVal por muito tempo, de ByVal hTemplateFile como por muito tempo) como por muito tempo
Confidencial declarar o liberal “kernel32” de ReadFile da função (ByVal hFile como por muito tempo, lpBuffer de ByVal como por muito tempo, nNumberOfBytesToRead de ByVal como por muito tempo, lpNumberOfBytesRead de ByRef como por muito tempo, ByVal lpOverlapped como por muito tempo) como por muito tempo
Confidencial declarar o liberal “kernel32” de CloseHandle da função (hObject de ByVal como por muito tempo) como por muito tempo
Confidencial declarar o liberal “wininet” de InternetOpenW da função (ByVal lpszAgent como o dwAccessType por muito tempo, de ByVal como o lpszProxyName por muito tempo, de ByVal como lpszProxyBypass por muito tempo, de ByVal como dwFlags por muito tempo, de ByVal como por muito tempo) como por muito tempo
Confidencial declarar o liberal “wininet” de InternetConnectW da função (hInternetSession de ByVal como o sServerName por muito tempo, de ByVal como o nServerPort por muito tempo, de ByVal como o sUsername por muito tempo, de ByVal como o sPassword por muito tempo, de ByVal como o lService por muito tempo, de ByVal como lFlags por muito tempo, de ByVal como o lcontext por muito tempo, de ByVal como por muito tempo) como por muito tempo
Confidencial declarar o liberal “wininet” de InternetWriteFile da função (ByVal hFile como por muito tempo, lpBuffer de ByVal como por muito tempo, dwNumberOfBytesToWrite de ByVal como por muito tempo, ByRef lpdwNumberOfBytesWritten como por muito tempo) como por muito tempo
Confidencial declarar o liberal “wininet” de InternetCloseHandle da função (hInternet de ByVal como por muito tempo) como por muito tempo
Confidencial declarar o liberal “wininet” de FtpOpenFileW da função (hConnect de ByVal como o lpszFileName por muito tempo, de ByVal como dwAccess por muito tempo, de ByVal como dwFlags por muito tempo, de ByVal como o dwContext por muito tempo, de ByVal como por muito tempo) como por muito tempo
Confidencial declarar o liberal “kernel32” de GetFileSize da função (ByVal hFile como o lpFileSizeHigh por muito tempo, de ByRef como por muito tempo) como por muito tempo

Escurecer o amortecedor (BUF_SIZE) como o byte
Escurecer dwReadBytes como por muito tempo
Escurecer dwWrittenBytes como por muito tempo
Não ofuscante hOpen como por muito tempo
Escurecer o hConnect como por muito tempo
Escurecer o hInternet como por muito tempo
Escurecer hFile como por muito tempo
 
 
FtpPutFileEx secundário público (_
  szServer de ByVal como a corda, _
  szUser de ByVal como a corda, _
  szPassword de ByVal como a corda, _
  ByVal szLocalFile como a corda, _
  ByVal szServerFile como a corda)
  
  dwStatus não ofuscante como por muito tempo
  Não ofuscante dwLoFileSize como por muito tempo
  Não ofuscante dwHiFileSize como por muito tempo
  Escurecer dwPercent como por muito tempo
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/conetar ao ftp server
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
   
  Se hConnect = 0 então
    Limpeza
    Debug.Print “InternetConnectW ()” & Err.LastDllError
    Retirar o submarino
  Terminar se
   
  '/começ o punho para o nome de arquivo que será escrito ao ftp server
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Se hInternet = 0 então
    Limpeza
    Debug.Print “FtpOpenFile ()” & Err.LastDllError
    Retirar o submarino
  Terminar se
   
  '/conseguir o punho para a lima local ler bytes
  hFile = CreateFileW (StrPtr (“\ \? \” & szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Se hFile = INVALID_HANDLE_VALUE então
    Limpeza
    Debug.Print “CreateFileW ()” & Err.LastDllError
    Retirar o submarino
  Terminar se
  
  '// começ o tamanho de lima local para o progresso. Sustentações deste exemplo
  '    somente até 2GB do progresso do relatório do status.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/ler a lima local, escrevem bytes da lima do usuário
  Fazer
    Se ReadFile (hFile, VarPtr (amortecedor (0)), BUF_SIZE, dwReadBytes, 0) então
      Se InternetWriteFile (hInternet, VarPtr (amortecedor (0)), dwReadBytes, dwWrittenBytes) então
        'Seguir a quantidade de bytes escritos e de porcentagem.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (o dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Terminar se
    Mais
      A saída faz
    Terminar se
    DoEvents
  Dar laços até dwReadBytes = 0
   
  Debug.Print “feitos”
  '/limpeza
  Limpeza
  Amortecedor do Erase
   
  
Submarino da extremidade
 
Limpeza secundária confidencial ()
   
  Se hOpen <> 0 então
    InternetCloseHandle hOpen
    hOpen = 0
  Terminar se
  Se hConnect <> 0 então
    hConnect de InternetCloseHandle
    hConnect = 0
  Terminar se
  Se hInternet <> 0 então
    hInternet de InternetCloseHandle
    hInternet = 0
  Terminar se
  Se > 0 hFile então
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Terminar se
   
Terminar o submarino
Outras soluções  
 
programming4us programming4us