Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

VBA Excel - cercare parte del testo in un file chiuso

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

VBA Excel - cercare parte del testo in un file chiuso

Postdi macio66 » 05/11/21 11:36

Buongiorno
Uso questo codice per verificare se un dato che sto inserendo, è presente in un file chiuso.

Codice: Seleziona tutto
Public Sub WorningCampioniLaboratori()
'
Dim wsh     As Excel.Worksheet
Dim wshTmp  As Excel.Worksheet
Dim rngTmp  As Excel.Range

Dim strValore         As String
Dim strMatriceTabella As String
Dim strIndice         As String
Dim strIntervallo     As String
Dim strFormula        As String
Dim vntRet            As Variant
'
Application.ScreenUpdating = False

   With Application.ThisWorkbook.Worksheets
        Set wsh = .Item("FogliodiAppoggio")
        Set wshTmp = .Item("FogliodiAppoggio")
   End With
   
      wshTmp.Range("AH2").Value = vbNullString
      Set rngTmp = wshTmp.Range("AH2")
      strValore = wsh.Range("GES_OL").Address(0, 0, External:=True)
      strMatriceTabella = PathCampioniLaboratori
      strIndice = "1"
      strIntervallo = "0"
     
      strFormula = "=VLOOKUP(" & strValore & "," & _
                                 strMatriceTabella & "," & _
                                 strIndice & "," & _
                                 strIntervallo & ")"

      rngTmp.Formula = strFormula
      vntRet = rngTmp.Value
     
      With Application
        .DisplayAlerts = False
        .DisplayAlerts = True
      End With
     
      If IsError(vntRet) Then
         sh6.Range("AH2").Value = vbNullString
         Exit Sub
      End If
'
      Beep
      btnMsgbox8
      Call ColoraUrgenze
'
      Set rngTmp = Nothing
      Set wshTmp = Nothing
      Set wsh = Nothing
'
    sh6.Range("AH2").Value = _
    sh6.Range("AH2").Value
'
Application.ScreenUpdating = False
'
End Sub


Va tutto bene se il dato che vado a confrontare, è presente nel file chiuso (nella colonna "D") singolarmente.
Per esempio, se sto inserendo nella cella (wsh.Range("GES_OL")) il valore "8000", e questo valore è presente in una cella della colonna "D" del file chiuso. Il valore viene trovato, e mi avvisa tramite messaggio.
Il problema nasce quando nella stessa cella oltre al valore "8000" compare un altro valore, per esempio "8001" , in questo modo (8000, 8001). Essendo il file chiuso uno scarico da un server, non posso modificarlo.
Come posso fare, per cercare parte del testo nel file chiuso?
macio66
Utente Senior
 
Post: 141
Iscritto il: 13/06/13 14:59

Sponsor
 

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi Anthony47 » 05/11/21 19:24

C'e' qualcosa che non mi torna nella tua formula:
Codice: Seleziona tutto
      strValore = wsh.Range("GES_OL").Address(0, 0, External:=True)
'..
'..     
      strFormula = "=VLOOKUP(" & strValore & "," & _
                                 strMatriceTabella & "," & _
                                 strIndice & "," & _
                                 strIntervallo & ")"

La tua strFormula come primo parametro del VLookUp contiene un indirizzo in formato esteso (tipo [NomeFile.xlsm]FoglioXX!A1:D12), e il secondo parametro sembra una cosa simile. Probabilmente nel semplificare il codice per il forum hai incrociato qualche riga...

Mi pare che la formula sia poi inserita in Sheets("FogliodiAppoggio").Range("AH2"); se e' così, puoi pubblicare quale formula ci leggi?

Poi servirebbe conoscere il formato dei dati su cui VLookUp va a "pescare"; per le istruzioni su come allegare almeno una immagine: viewtopic.php?f=26&t=103893&p=605488#p605488

Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17939
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi macio66 » 05/11/21 21:43

Ciao Anthony
Questi sono i file di esempio:
http://www.filedropper.com/prova_8
http://www.filedropper.com/campionilaboratori_1
nel file "prova" foglio "FogliodiAppoggio", ce il valore da verificare( 8470753 )
nel file "Campioni_laboratori", che è lo scarico del server, questo valore è presente, ma insieme ad un altro valore.
Questa è la condizione in cui non mi funziona il codice. Infatti se tolgo il secondo valore presente, mi funziona.
Il mio problema è riuscire a trovare la parte del testo che mi interessa all'interno della cella.
macio66
Utente Senior
 
Post: 141
Iscritto il: 13/06/13 14:59

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi Anthony47 » 06/11/21 00:07

Potresti ad esempio usare la formula da inserire in forma matriciale:
Codice: Seleziona tutto
=SOMMA(SE.ERRORE(TROVA(E2;[Campioni_laboratori_C11105.xlsx]Campioni_laboratori!D2:D50);0))


Per ottenerla, nel tuo codice, modifica l'attuale istruzione strFormula = "=VLOOKUP(" etc etc (tutte le 4 righe) con
Codice: Seleziona tutto
strFormula = "=SUM(IFERROR(FIND(" & strValore & "," & strMatriceTabella & "),0))"


Ti restituira' 0 se "la stringa cercata" non esiste nell'elenco su Campioni_laboratori; oppure >0 se "la stringa" esiste. Dovrai quindi modificare l'istruzione con cui controlli se l'errore e' presente (userai If vntRet=0 Then invece di If IsError(vntRet) Then)

Sottolineo "la stringa cercata" per evidenziare che questa ricerca trovera' (mettiamo) 8000 se la cella contiene 8000, 8001; ma dara' anche un "falso positivo" se cerchi 8000 e la cella contiene 8000123. Tu conosci la codifica in OdL, quindi puoi capire se il pericolo e' reale o solo immaginario; se "reale" allora dovremo "irrobustire" (cioe' complicare) la formula, ma sono sicuro che si potra' fare.

E' anche opportuno che modifichi la creazione di strValore:
Codice: Seleziona tutto
strValore = wsh.Range("GES_OL").Address(0, 0)


Ciao
Avatar utente
Anthony47
Moderatore
 
Post: 17939
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi macio66 » 06/11/21 09:47

Ciao Anthony
Innanzitutto grazie per le dritte. Ora le provo.
Per quanto riguarda il pericolo del "falso positivo" è possibile, Infatti può capitare che il numero presente nella codifica OdL, subisca uno sdoppiamento.
Per esempio oltre al documento "8470753", potrebbe esserci "8470753/1", oppure "8470753A", e il worning essere sullo sdoppiato e non sul documento padre.
macio66
Utente Senior
 
Post: 141
Iscritto il: 13/06/13 14:59

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi macio66 » 06/11/21 10:32

Ciao
Ho modificato il codice in questo modo:
Codice: Seleziona tutto
Public Sub WorningCampioniLaboratori()
'
Dim wsh     As Excel.Worksheet
Dim wshTmp  As Excel.Worksheet
Dim rngTmp  As Excel.Range

Dim strValore         As String
Dim strMatriceTabella As String
Dim strIndice         As String
Dim strIntervallo     As String
Dim strFormula        As String
Dim vntRet            As Variant
'
Application.ScreenUpdating = False

   With Application.ThisWorkbook.Worksheets
        Set wsh = .Item("FogliodiAppoggio")
        Set wshTmp = .Item("FogliodiAppoggio")
   End With

      wshTmp.Range("AH2").Value = vbNullString
      Set rngTmp = wshTmp.Range("AH2")
      strValore = wsh.Range("GES_OL").Address(0, 0)
      strMatriceTabella = PathCampioniLaboratori
      strIndice = "1"
      strIntervallo = "0"
      strFormula = "=Sum(IfError(Find(" & strValore & "," & strMatriceTabella & "),0))"
     
      rngTmp.Formula = strFormula
      vntRet = rngTmp.Value

      With Application
        .DisplayAlerts = False
        .DisplayAlerts = True
      End With

      If vntRet = 0 Then
         sh6.Range("AH2").Value = vbNullString
         Exit Sub
      End If
'
      Beep
      btnMsgbox8
'      Call ColoraUrgenze
'
      Set rngTmp = Nothing
      Set wshTmp = Nothing
      Set wsh = Nothing
'
    sh6.Range("AH2").Value = sh6.Range("GES_OL").Value
'
Application.ScreenUpdating = False
'
End Sub

Però il valore di vntRet è sempre 0. Dove sbaglio?
macio66
Utente Senior
 
Post: 141
Iscritto il: 13/06/13 14:59

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi Anthony47 » 06/11/21 15:18

[...]
Però il valore di vntRet è sempre 0. Dove sbaglio?
Sbagli che non ti ho detto che va usato .FormulaArray invece che .Formula :D :D
Codice: Seleziona tutto
rngTmp.FormulaArray = strFormula


Ho anche modificato la formula per evitare i falsi positivi:
Codice: Seleziona tutto
        strFormula = "=SUM(IFERROR(FIND(" & """, ""&" & strValore & "&"",""" & "," & """, ""& " & strMatriceTabella & "&"",""" & "),0))"
        rngTmp.FormulaArray = strFormula

Riprova...
Avatar utente
Anthony47
Moderatore
 
Post: 17939
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: VBA Excel - cercare parte del testo in un file chiuso

Postdi macio66 » 06/11/21 16:56

Ora funziona perfettamente

Grazie, e buona serata
macio66
Utente Senior
 
Post: 141
Iscritto il: 13/06/13 14:59


Torna a Applicazioni Office Windows


Topic correlati a "VBA Excel - cercare parte del testo in un file chiuso":

[XML] Generare un file xml.
Autore: sbs
Forum: Software Windows
Risposte: 5

Chi c’è in linea

Visitano il forum: Nessuno e 22 ospiti