Condividi tramite

filesearch con excel 2007

Anonimo
2015-04-02T15:57:21+00:00

Chiedo un aiuto a chi è più esperto di me, il mio problema è il seguente, ho utilizzato il codice elencato di seguito, per fare una verifica se il file che andavo a creare non esistesse già, e fin quanto ho usato Excel 2003 ha sempre funzionato, da quando sono passato ad Excel 2007 mi il seguente errore:

"errore di Runtime 445" "azione non valida per l'oggetto" il codice è il seguente:

'=============================== ricerca per verificare se il file già esiste ========================

'Set fs = Application.FileSearch

'With fs

'.LookIn = (Directory) 'indichiamo il percorso in cui cercare il file

'.Filename = (FName1) 'indichiamo il file da cercare

'If .Execute() > 0 Then

'For i = 1 To .FoundFiles.Count

'Richiesta = MsgBox("Il File: " & FName1 & " già Esiste" & vbCr & "Vuoi Creare un'altra Scheda ?", vbYesNo)

'If Richiesta = vbYes Then

'    GoTo 1

'Else

'    GoTo 2

'End If

'Next

'End If

'End With

'=========================================== Fine Ricerca del File ====================================

credo di aver capito che filesearch non sia più supportato in Excel 2007, ma come posso modificare questa parte di codice ?

ringrazio tutti coloro che possano darmi una spiegazione valida, e che possa capire, visto che non sono un esperto in materia di vba

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento

13 risposte

Ordina per: Più utili
  1. Anonimo
    2015-04-03T09:20:55+00:00

    Prova il secondo.

    Per il primo segui tutte le istruzioni, cioè copia in un modulo anche la funzione MyFileSearch e GetFilenameFromFullname.

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2015-04-03T08:24:54+00:00

    Grazie Maurizio, ho provato il primo codice che mi hai scritto, ma la macro si blocca su [MyFileSearch] mi restituisce "Errore di compilazione - sub o function non definita", dov'è che sbaglio?

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2015-04-03T07:14:06+00:00

    Ciao MaAn56,

    Il tuo codice andrebbe riscritto per esempio così:

    Dim vntFound  As Variant

        vntFound = MyFileSearch(FName1, Directory)

        If IsEmpty(vntFound) Then

          ' Nessun file trovato.

        Else

          For i = 0 To UBound(vntFound)

            Richiesta = MsgBox("Il File:" _

                             & " " & GetFilenameFromFullname(vntFound(i)) _

                             & " già Esiste" _

                             & vbCr & "Vuoi Creare un'altra Scheda ?" _

                             , vbYesNo)

            If Richiesta = vbYes Then

                GoTo 1

            Else

                GoTo 2

            End If

          Next

        End If

    se decidi di usare la seguente funzione che ho proposto in quel post e che dovrai copiare e incollare in un Modulo standard:

    Public Function MyFileSearch(Optional ByVal Filename As String _

                               , Optional ByVal Path As String)

    Dim strPath     As String

    Dim strFilename As String

    Dim strDir      As String

    Dim strFound()  As String

        If Len(Path) Then strPath = Path Else strPath = CurDir$

        If Right$(strPath, 1) <> "" Then strPath = strPath & ""

        If Len(Filename) Then strFilename = Filename Else strFilename = "*.*"

        strDir = Dir(strPath & strFilename, vbNormal)

        If Len(strDir) = 0 Then Exit Function

        ReDim strFound(0)

        Do While Len(strDir)

          strFound(UBound(strFound)) = strPath & strDir

          ReDim Preserve strFound(UBound(strFound) + 1)

          strDir = Dir

        Loop

        ReDim Preserve strFound(UBound(strFound) - 1)

        MyFileSearch = strFound

    End Function

    Insieme alla seguente, che estrae Nome e Estensione del nome del file dal Percorso completo restituito dalla funzione 'MyFileSearch':

    Public Function GetFilenameFromFullname(ByVal Fullname As String) As String

        On Error Resume Next

        GetFilenameFromFullname = Mid$(Fullname _

                                     , InStrRev(Fullname _

                                              , "" _

                                              , Compare:=vbTextCompare) + 1)

    End Function

    Ovviamente si può sofisticare di più il tutto, in caso di bisogno, ma a quanto vedo da quel che scrivi dovrebbe bastare così.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2015-04-03T06:27:13+00:00

    Ciao Maurizio, non credo di aver capito bene l'esempio del tuo thread, ti spiego meglio, questa parte di codice che ho scritto fa parte di una macro che lavora in una cartella diversa dal file dove mi dovrebbe verificare se il file esiste già. La macro prende il file dalla cartella indicata in (Directory) e il nome del file (FName1) che riportano ai nomi indicati in due celle del file, quindi prende il file, apporta le dovute modifiche, chiude il file originario, e salva il nuovo file nella cartella (Direcotory).

    Quindi la funzione Filesearch mi verifica la presenza di un file con lo stesso nome prima di salvare il nuovo file, se già esiste rispondendo NO alla MsgBox esco dalla macro. Spero di essere stato chiaro, perché ripeto sono un autodidatta in materia, se necessario di posso scrivere il codice completo della macro.

    Grazie

    Antonio

    La risposta è stata utile?

    0 commenti Nessun commento
  5. Anonimo
    2015-04-02T18:07:25+00:00

    Ciao MaAn56,

    facci sapere se quanto (da me) indicato in questo recente thread può esserti utile:

    Application.FileSearch non funziona

    La risposta è stata utile?

    0 commenti Nessun commento