Newsgroup: it.comp.appl.access
Titolo: CTRL+C via codice

Buongiorno a tutti,
Vorrei far si che il Sistema effettui una copia dei file contenuti in una cartella, in modo che l'utente non debba aprirla, selezionare i file, e fare CTRL+C (non ho bisogno di incollarli altrove, ma solo di copiarli).
 
 
Ho cercato in rete e nel gruppo ma non sono riuscito a trovare quello che mi serve.
 
Mi potreste aiutare?
Grazie,
eman

eman scriveva il 04/12/2019 :

Ciao,
 
Io uso il codice trovato qui:
http://vb.mvps.org/samples/ClipFileCopy/
 
 
Se hai problemi ad usarlo, dimmelo che copio-incollo il codice diretto 
per Access (ma è un po' lunghetto).
Fammi sapere.
 
Ciao.
 
Silvio


Ciao Silvio,
Grazie per la risposta.
 
Dallo zip allegato nella pagina che mi hai linkato ho estratto il file MClipFileCopy.bas che contiene la funzione pubblica clipCopyFiles.
 
Il problema che incontro è che non so come passargli l'elenco dei file contenuti nella cartella tramite la stringa Files().
 
Mi potresti aiutare a risolvere questo passaggio?
Grazie!
 
Questa è la funzione clipCopyFiles (non includo tutto il codice perchè è piuttosto lungo):
 
 
Public Function clipCopyFiles(Files() As String) As Boolean
   Dim data As String
   Dim df As DROPFILES
   Dim hGlobal As Long
   Dim lpGlobal As Long
   Dim i As Long
 
   ' Open and clear existing crud off clipboard.
   If OpenClipboard(0&) Then
      Call EmptyClipboard
 
      ' Build double-null terminated list of files.
      For i = LBound(Files) To UBound(Files)
         data = data & Files(i) & vbNullChar
      Next i
      data = data & vbNullChar
 
      ' Allocate and get pointer to global memory,
      ' then copy file list to it.
      hGlobal = GlobalAlloc(GHND, Len(df) + Len(data))
      If hGlobal Then
         lpGlobal = GlobalLock(hGlobal)
 
         ' Build DROPFILES structure in global memory.
         df.pFiles = Len(df)
         Call CopyMem(ByVal lpGlobal, df, Len(df))
         Call CopyMem(ByVal (lpGlobal + Len(df)), ByVal data, Len(data))
         Call GlobalUnlock(hGlobal)
 
         ' Copy data to clipboard, and return success.
         If SetClipboardData(CF_HDROP, hGlobal) Then
            clipCopyFiles = True
         End If
      End If
 
      ' Clean up
      Call CloseClipboard
   End If
End Function

È un'array di stringhe... 
Files(0)="c:\file1.xxx"
Files(1)="....."
Ecc..
 
@Alex

eman scriveva il 04/12/2019 :

Ciao
 
Ti ha risposto anche @Alex:
 
clipCopyFiles accetta solo una MATRICE
 
Quindi:
   Dim Files() As String
 
...la riempi come meglio credi.
Poi richiami la funzione così:
   Call clipCopyFiles(Files())
 
Facci sapere.
 
Ciao
 
Silvio


Perfetto,
funziona a meraviglia!
 
Per completezza riporto qui sotto il codice.
Grazie ad entrambi!
 
 
1. Prima passo in rassegna i record della tabella che ospita i percorsi dei file contenuti nella cartella, e li accodo nella stringa stTmp separandoli con ";":
 
    Dim db As DAO.Database
    Dim rst As DAO.Recordset
    Dim stTmp As String
 
    Set db = CurrentDb
    Set rst = db.OpenRecordset("SELECT * " & _
                               "FROM tCliElencoFile;", dbOpenDynaset)
 
    stTmp = ""
 
    'record presenti
    If Not (rst.EOF And rst.BOF) Then
        rst.MoveFirst
        Do Until rst.EOF = True
            stTmp = stTmp & rst!nomeFile & ";"
            rst.MoveNext
        Loop
        rst.Close   
        db.Close    
    'nessun record 
    Else
        GoTo Exit_cmdCopyAllLocal_Click
    End If
 
 
2. Poi passo stTmp a Files() e copio l'array in memoria tramite la chiamata a clipCopyFiles
 
    Dim Files() As String
    Files() = Split(stTmp, ";")
 
    Call clipCopyFiles(Files())
 
    Debug.Print "" & fles & ""
 
    MsgBox "I file sono stati copiati in memoria."
 
Exit_cmdCopyAllLocal_Click:
    Exit Sub