codice:
Public Type ZIPnames
   s(0 To 99) As String
End Type

Public Type ZPOPT
   fSuffix As Long
   fEncrypt As Long
   fSystem As Long
   fVolume As Long
   fExtra As Long
   fNoDirEntries As Long
   fExcludeDate As Long
   fIncludeDate As Long
   fVerbose As Long
   fQuiet As Long
   fCRLF_LF As Long
   fLF_CRLF As Long
   fJunkDir As Long
   fRecurse As Long
   fGrow As Long
   fForce As Long
   fMove As Long
   fDeleteEntries As Long
   fUpdate As Long
   fFreshen As Long
   fJunkSFX As Long
   fLatestTime As Long
   fComment As Long
   fOffsets As Long
   fPrivilege As Long
   fEncryption As Long
   fRepair As Long
   flevel As Byte
   date As String ' 8 byte
   szRootDir As String ' fino a 256 byte
End Type

Public Type ZIPUSERFUNCTIONS
   DLLPrnt As Long
   DLLPASSWORD As Long
   DLLCOMMENT As Long
   DLLSERVICE As Long
End Type
  
Public Type CBChar
   ch(4096) As Byte
End Type
Public Declare Function ZpInit Lib "zip32.dll" (ByRef Zipfun As ZIPUSERFUNCTIONS) As Long
Public Declare Function ZpSetOptions Lib "zip32.dll" (ByRef Opts As ZPOPT) As Long
Public Declare Function ZpArchive Lib "zip32.dll" (ByVal argc As Long, ByVal funame As String, ByRef argv As ZIPnames) As Long

Function Stampa_messaggi_zip(ByRef fname As CBChar, ByVal lenght As Long) As Long
   Dim Messaggio As String ' conterrà il messaggio
   Dim i As Long ' lunghezza in byte del messaggio
 
   On Error Resume Next 'sempre necessario nelle funzioni di callback
  ' ricostruisco il messaggio a partire dalla stringa di byte
   For i = 0 To lenght
   If fname.ch(i) = 0 Then Exit For Else Messaggio = Messaggio + Chr(fname.ch(i))
   Next i
 
   Debug.Print "" & Messaggio
   DoEvents
   Stampa_messaggi_zip = 0

End Function

Function Puntatore(ByVal lp As Long) As Long
   Puntatore = lp
End Function

'questo è il codice per zippare

Private Sub command1_click()

  Dim MYUSER As ZIPUSERFUNCTIONS
  Dim retcode As Long
  

  MYUSER.DLLPrnt = Puntatore(AddressOf Stampa_messaggi_zip) 'callback
  MYUSER.DLLPASSWORD = 0&
  MYUSER.DLLCOMMENT = 0&
  MYUSER.DLLSERVICE = 0&
  ' Gli ultimi tre valori non sono utilizzati.

  retcode = ZpInit(MYUSER)

  Dim MYOPT As ZPOPT
  MYOPT.fForce = 0
  MYOPT.fMove = 0
  retcode = ZpSetOptions(MYOPT)
         
  Dim files As ZIPnames
  Dim zipName As String

          
  ' inseriamo l'elenco dei file nella struttura ZIPnames, precedentemente dichiarata
  files.s(0) = "miofile.pdf"
  files.s(1) = "miofile2.pdf"
  files.s(2) = "ciao.txt"
  ' ora decidiamo il nome dell’archivio che stiamo preparando:
  zipName = DestFile
           
  ' … e ora richiamiamo la funzione ZpArchive, con i seguenti parametri:
  ' – numero di file da zippare
  ' – nome dell’archivio
  ' – elenco dei file
           
  retcode = ZpArchive(3, zipName, files)
End Sub
dovrebbe esserci tutto