Questione : Using wininet.dll con il codice di vba all'interno della macro di Excel 2003 sull'assistente R2 delle finestre 2008. Il ftp appende

Stiamo utilizzando l'interfaccia di programmi applicativi del Internet di Windows (WinINet) (wininet.dll) con il seguente codice di VBA in Microsoft Excel 2003 che funziona sull'assistente terminale R2 dell'assistente 2008 di Windows.  Appende per 20-45 secondi dopo l'esecuzione della linea blnRc = FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) ma ancora completa il ftp messo.  Sul nostro Windows Xp /2003 lavora istantaneamente il ftp alla macchina messo funzionamenti e non fa lngINet fioco del
del
di hang.
come il lngINet di Long
=
di InternetOpen (“ServerName„, 1, vbNullString, vbNullString, 0) oscura il lngINetConn come
del lngINetConn di Long
= del
di InternetConnect (lngINet, assistente, 0, utente, pwd, 1, 0, 0) oscura il blnRc come il blnRc del
del blnRc di Boolean
= del
di FtpPutFile (lngINetConn, OutFile1, txt, 1, 0) = blnRc di
di FtpDeleteFile (lngINetConn, ceppo del ) =
di FtpDeleteFile (lngINetConn, scarti del ) il blnRc = lngINet
del lngINetConn
InternetCloseHandle del

InternetCloseHandle del
di FtpDeleteFile (lngINetConn, il ragiona) non sure se fa una differenza ma l'assistente esso è FTPing a è un rel= " nofollow "„ del _blank„„ del target= " di http://msdn.microsoft.com/en-us/library/aa383630(v=VS.85).aspx del href= del
del Sun Solaris 10 box.
> en-us/library/aa383630 (v=VS.85) .aspx
di http://msdn.microsoft.com/ class= del

Risposta : Using wininet.dll con il codice di vba all'interno della macro di Excel 2003 sull'assistente R2 delle finestre 2008. Il ftp appende

Qui avete una versione estesa di FtpPutFile… (FtpPutFileEx) metodo su ordinazione che può calcolare le informazioni di byte per progresso come pure i messaggi della pompa al UI.

Uso:
 FtpPutFileEx “ftp.server.com„, “utente„, “passaggio„, “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:
Opzione esplicita
'egl1044
Const riservato BUF_SIZE = amplificatore di difetto 4096 '4KB per il ftp
 
Const riservato INVALID_HANDLE_VALUE = (- 1)
Const riservato OPEN_EXISTING = &H3&
Const riservato GENERIC_READ = &H80000000
Const riservato GENERIC_WRITE = &H40000000
Const riservato INTERNET_OPEN_TYPE_PRECONFIG = 0
Const riservato INTERNET_SERVICE_FTP = 1
Const riservato INTERNET_DEFAULT_FTP_PORT = 21
Const riservato FTP_TRANSFER_TYPE_UNKNOWN = 0
 
Riservato dichiarare il movimento di liberazione “kernel32„ di CreateFileW di funzione (lpFileName di ByVal come dwDesiredAccess di ByVal, lungamente come dwShareMode di ByVal, lungamente come lpSecurityAttributes di ByVal, lungamente come dwCreationDisposition di ByVal, lungamente come dwFlagsAndAttributes come lungamente, ByVal di ByVal, lungamente hTemplateFile come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “kernel32„ di ReadFile di funzione (ByVal hFile come lungamente, lpBuffer di ByVal come lungamente, nNumberOfBytesToRead di ByVal come lungamente, lpNumberOfBytesRead di ByRef come lungamente, ByVal lpOverlapped come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “kernel32„ di CloseHandle di funzione (hObject di ByVal come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “wininet„ di InternetOpenW di funzione (ByVal lpszAgent come dwAccessType di ByVal, lungamente come lpszProxyName di ByVal, lungamente come lpszProxyBypass di ByVal, lungamente come dwFlags di ByVal, lungamente come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “wininet„ di InternetConnectW di funzione (hInternetSession di ByVal come sServerName di ByVal, lungamente come nServerPort di ByVal, lungamente come sUsername di ByVal, lungamente come sPassword di ByVal, lungamente come lService di ByVal, lungamente come lFlags di ByVal, lungamente come lcontext di ByVal, lungamente come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “wininet„ di InternetWriteFile di funzione (ByVal hFile come lungamente, lpBuffer di ByVal come lungamente, dwNumberOfBytesToWrite di ByVal come lungamente, ByRef lpdwNumberOfBytesWritten come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “wininet„ di InternetCloseHandle di funzione (hInternet di ByVal come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “wininet„ di FtpOpenFileW di funzione (hConnect di ByVal come lpszFileName di ByVal, lungamente come dwAccess di ByVal, lungamente come dwFlags di ByVal, lungamente come dwContext di ByVal, lungamente come lungamente) come lungamente
Riservato dichiarare il movimento di liberazione “kernel32„ di GetFileSize di funzione (ByVal hFile come lpFileSizeHigh di ByRef, lungamente come lungamente) come lungamente

Oscurare l'amplificatore (BUF_SIZE) come byte
Oscurare i dwReadBytes come lungamente
Oscurare i dwWrittenBytes come lungamente
Fioco hOpen come lungamente
Oscurare il hConnect come lungamente
Oscurare il hInternet come lungamente
Oscurare hFile come lungamente
 
 
FtpPutFileEx secondario pubblico (_
  szServer di ByVal come stringa, _
  szUser di ByVal come stringa, _
  szPassword di ByVal come stringa, _
  ByVal szLocalFile come stringa, _
  ByVal szServerFile come stringa)
  
  dwStatus fioco come lungamente
  Fioco dwLoFileSize come lungamente
  Fioco dwHiFileSize come lungamente
  Oscurare dwPercent come lungamente
  
  '/init
  hOpen = InternetOpenW (0, INTERNET_OPEN_TYPE_PRECONFIG, 0, 0, 0)
   
  '/collegar al ftp server
  hConnect = InternetConnectW (hOpen, StrPtr (szServer), INTERNET_DEFAULT_FTP_PORT, StrPtr (szUser), StrPtr (szPassword), INTERNET_SERVICE_FTP, 0, 0)
   
  Se hConnect = 0 allora
    Pulizia
    Debug.Print “InternetConnectW ()„ & Err.LastDllError
    Uscire il sommergibile
  Concluder se
   
  '/ottenere la maniglia per il nome di schedario che sarà scritto al ftp server
  hInternet = FtpOpenFileW (hConnect, StrPtr (szServerFile), GENERIC_WRITE, FTP_TRANSFER_TYPE_UNKNOWN, 0)
   
  Se hInternet = 0 allora
    Pulizia
    Debug.Print “FtpOpenFile ()„ & Err.LastDllError
    Uscire il sommergibile
  Concluder se
   
  '/convincere la maniglia per la lima locale per leggere i byte
  hFile = CreateFileW (StrPtr (“\ \? \„ & szLocalFile), GENERIC_READ, 0, 0, OPEN_EXISTING, 0, 0)
   
  Se hFile = INVALID_HANDLE_VALUE allora
    Pulizia
    Debug.Print “CreateFileW ()„ & Err.LastDllError
    Uscire il sommergibile
  Concluder se
  
  '// ottiene il formato di lima locale per progresso. Supporti di questo esempio
  '    soltanto fino a 2GB di progresso di segnalazione di condizione.
  dwLoFileSize = GetFileSize (hFile, dwHiFileSize)
  
  '/leggere la lima locale, scrivono i byte della lima dell'assistente
  Fare
    Se ReadFile (hFile, VarPtr (amplificatore (0)), BUF_SIZE, dwReadBytes, 0) allora
      Se InternetWriteFile (hInternet, VarPtr (amplificatore (0)), dwReadBytes, dwWrittenBytes) allora
        'Seguire la quantità di byte scritti e di percentuale.
        dwStatus = (dwStatus + dwWrittenBytes)
        dwPercent = (dwStatus/dwLoFileSize) * 100
        'Label1.Caption = dwPercent
      Concluder se
    Altrimenti
      L'uscita fa
    Concluder se
    DoEvents
  Collegare fino ai dwReadBytes = 0
   
  Debug.Print “fatti„
  '/pulizia
  Pulizia
  Amplificatore di Erase
   
  
Sommergibile dell'estremità
 
Pulizia secondaria riservata ()
   
  Se allora <> hOpen 0
    InternetCloseHandle hOpen
    hOpen = 0
  Concluder se
  Se hConnect <> 0 allora
    hConnect di InternetCloseHandle
    hConnect = 0
  Concluder se
  Se hInternet <> 0 allora
    hInternet di InternetCloseHandle
    hInternet = 0
  Concluder se
  Se > 0 hFile allora
    CloseHandle hFile
    hFile = INVALID_HANDLE_VALUE
  Concluder se
   
Concludere il sommergibile
Altre soluzioni  
 
programming4us programming4us