Acquista i nostri libri consigliati su Amazon.it
+ Rispondi al messaggio
Visualizzazione dei risultati da 1 a 10 su 10

Ricerca testo ACCESS con VBA

  1. #1
    carminecrr non  in linea Novello
    Post
    34
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ho un problema con questo codice, lo stesso funziona se nel testo620 presente solo un risultato, se ci sono due risultati non mi funziona, di seguito il codice che ho scritto. Segue spiegazione..

    Private Sub CasellaCombinata65_AfterUpdate() 
    
    Dim Testo657 As String
    Dim Testo620 As String
    Dim Testo659 As Integer
    
    Testo657 = Me.Testo657
    Testo620 = Me.Testo620
    
    Testo659 = InStr(1, Testo657, Testo620, vbTextCompare)
    
    If Testo659 = 0 Then
    MsgBox """" & " L 'AUDITOR NON HA L'AREA TECNICA PER POTER CONDURRE DA SOLO L'AUDIT, SCEGLIERE UN AUDITOR IN POSSESSO DELL'AREA TECNICA:" & Chr(13) & Chr(10) & """" & Me.Testo620 & """"
    
    End If
    
    End Sub
    

    Io prima scelgo l'azienda e nella casella Testo620 (richiama una serie di codici assegnati all'azienda, Esempio AT2 - AT23)
    Poi scelgo l'auditor e nella casella Testo657 (richiama una serie di codice assegnati all'auditor, esempio AT1 - AT2 - AT3 - AT23 - AT27, ecc.)

    La casella Testo659 la uso per il risultato.

    Se l'azienda ha un solo codice (il tutto funziona), se l'azienda ha due codici come nell'esempio sopra "AT2 - AT23", il codice dovrebbe controllare se nel Testo657 presente, se c' tutto OK altrimenti mi dovrebbe dare l'avviso MsgBox .

    Grazie per i consigli.
    Ultima modifica di AntonioG; 16-10-2014 11:24  Motivo: Inserire i tag CODE per il codice ...

  2. #2
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Ho un problema con questo codice, lo stesso funziona se nel testo620 presente solo un risultato, se ci sono due risultati non mi funziona, di seguito il codice che ho scritto. Segue spiegazione..
    Testo659 = InStr(1, Testo657, Testo620, vbTextCompare)
    
    Io prima scelgo l'azienda e nella casella Testo620 (richiama una serie di codici assegnati all'azienda, Esempio AT2 - AT23)
    Poi scelgo l'auditor e nella casella Testo657 (richiama una serie di codice assegnati all'auditor, esempio AT1 - AT2 - AT3 - AT23 - AT27, ecc.)

    Se l'azienda ha un solo codice (il tutto funziona), se l'azienda ha due codici come nell'esempio sopra "AT2 - AT23", il codice dovrebbe controllare se nel Testo657 presente, se c' tutto OK altrimenti mi dovrebbe dare l'avviso MsgBox .
    InStr(1, "AT1 - AT2 - AT3 - AT23 - AT27", "AT2 - AT23", vbTextCompare)
    
    dar sempre risultato 0 perch nella stringa in cui fare la ricerca non trova la corrispondenza della stringa cercata. Devi cercare un altro modo per "estrarre" i singolarmente i codici assegnati all'azienda e per ognuno di questi eventualmente eseguire la ricerca con InStr in modo che esegua, in serie (un classico ciclo)
    InStr(1, "AT1 - AT2 - AT3 - AT23 - AT27", "AT2", vbTextCompare)
    InStr(1, "AT1 - AT2 - AT3 - AT23 - AT27", "AT23", vbTextCompare)
    
    anche se forse c' di meglio: non possibile avere i codici dell'auditor in una tabella, un record per ogni codice?
    Integro: allo stato attuale (cio serie di codici affiancati in un'unica stringa) l'unica via che trovo quella di creare un array con Split su Testo620, con carattere di separazione " - " (spazi compresi, se li prende, non l'ho mai fatto). Per ogni elemento dell'array esegui la ricerca con InStr.
    Dim arrTesto620() as String
    Dim i as Integer
    ArrTesto620 = Split (Testo620, " - ")
    For i = 0 to UBound(ArrTesto620)
    InStr(1, Testo657, ArrTesto620(i))
    Next
    
    Dopo si tratta di uscire dal ciclo, senza dover continuare per ogni elemento dell'array, una volta soddisfatta per la prima volta la ricerca.
    Ultima modifica di Phil_cattivocarattere; 16-10-2014 12:21 

  3. #3
    carminecrr non  in linea Novello
    Post
    34
    Like Inviati  
    0
    Like Ricevuti  
    0
    I codici auditor sono riportati in una tabella (ho 30 campi dove scrivo il codice, esempio campo1= AT1, campo2= AT5,), non detto che sono consecutivi e che siamo sempre gli stessi per tutti. Posso avere anche auditor con solo 2 codici.

    Per le aziende il campo Testo620 viene richiamato da una casella combinata dove il codice riferito a un singolo campo che pu avere anche 3 o 4 codici separati da " - ".

    Il campo Testo657 viene fuori dall'aggiornamento di una casella combinata per la scelta dell'audior ha come origine una query unione dove io ho unito i vari campo1, campo2 ecc fino a 30, li ho uniti cos [Campo1]&" - "&[Campo2] ecc.

    Quindi impensabile di creare la combinazione di 30 campi.

    Pensavo che il modo migliore fosso quello di raggruppare i codici degli auditor nella casella Testo657 e quello dell'azienda in Testo620, compararli per vedere se tutto il contenuto di Testo620 e anche presente in Testo657.

    Non ho proprio idee.
    Grazie cmq

  4. #4
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    I codici auditor sono riportati in una tabella (ho 30 campi dove scrivo il codice, esempio campo1= AT1, campo2= AT5,), non detto che sono consecutivi e che siamo sempre gli stessi per tutti. Posso avere anche auditor con solo 2 codici.
    Questo l'avevo immaginato
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Per le aziende il campo Testo620 viene richiamato da una casella combinata dove il codice riferito a un singolo campo che pu avere anche 3 o 4 codici separati da " - ".

    Il campo Testo657 viene fuori dall'aggiornamento di una casella combinata per la scelta dell'audior ha come origine una query unione dove io ho unito i vari campo1, campo2 ecc fino a 30, li ho uniti cos [Campo1]&" - "&[Campo2] ecc.

    Quindi impensabile di creare la combinazione di 30 campi.
    Non ho capito un granch se non il fatto che era quello che temevo.
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Pensavo che il modo migliore fosso quello di raggruppare i codici degli auditor nella casella Testo657 e quello dell'azienda in Testo620, compararli per vedere se tutto il contenuto di Testo620 e anche presente in Testo657.
    Allora vale quello che ho detto alla fine del post precedente:
    Dim arrTesto620() as String
    Dim i as Integer
    ArrTesto620 = Split (Testo620, " - ")
    For i = 0 to UBound(ArrTesto620)
    InStr(1, Testo657, ArrTesto620(i))
    Next
    
    che continuo a considerare una soluzione "di ripiego" per una situazione strana.

  5. #5
    carminecrr non  in linea Novello
    Post
    34
    Like Inviati  
    0
    Like Ricevuti  
    0
    Ho provato per mi restituisce un errore di sintassi su

    InStr(1, Testo657, ArrTesto620(i))



    Ho scritto

    Private Sub CasellaCombinata65_AfterUpdate()
    Dim arrTesto620() As String
    Dim i As Integer
    arrTesto620 = Split(Testo620, " - ")
    For i = 0 To UBound(arrTesto620)
    InStr(1, Testo657, ArrTesto620(i))
    Next
    End Sub


    Non ho capito bene il codice oppure sbaglio

  6. #6
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Ho provato per mi restituisce un errore di sintassi su

    InStr(1, Testo657, ArrTesto620(i))

    Ho scritto

    Private Sub CasellaCombinata65_AfterUpdate()
    Dim arrTesto620() As String
    Dim i As Integer
    arrTesto620 = Split(Testo620, " - ")
    For i = 0 To UBound(arrTesto620)
    InStr(1, Testo657, ArrTesto620(i))
    Next
    End Sub


    Non ho capito bene il codice oppure sbaglio
    O dichiari Testo657 come variabile e gli assegni un valore o, presumento che sia un controllo nella stessa maschera, devi dire che prenda il valore di quel controllo: Me.Testo657.Value. Stessa cosa per Testo620
    L'avevo cucito in base al codice scritto all'inizio dove c'era
    Dim Testo657 As String
    Dim Testo620 As String
    Dim Testo659 As Integer
    
    Testo657 = Me.Testo657
    Testo620 = Me.Testo620
    
    e tutto il proseguimento con IF e alla fine la msgbox
    Private Sub CasellaCombinata65_AfterUpdate() 
    
    Dim Testo657 As String
    Dim Testo620 As String
    Dim Testo659 As Integer
    
    Testo657 = Me.Testo657
    Testo620 = Me.Testo620
    
    Dim arrTesto620() As String
    Dim i As Integer
    
    arrTesto620 = Split(Testo620, " - ")
    For i = 0 To UBound(arrTesto620)
    	Testo659 = InStr(1, Testo657, ArrTesto620(i))
    	If Testo659 then
    	Exit For
    	End If
    Next
    
    
    If Testo659 = 0 Then
    MsgBox """" & " L 'AUDITOR NON HA L'AREA TECNICA PER POTER CONDURRE DA SOLO L'AUDIT, SCEGLIERE UN AUDITOR IN POSSESSO DELL'AREA TECNICA:" & Chr(13) & Chr(10) & """" & Me.Testo620 & """"
    
    End If
    
    End Sub
    
    Lo sto ancora sistemando, attendere prego. Ora dovrebbe andare
    Ultima modifica di Phil_cattivocarattere; 16-10-2014 15:59 

  7. #7
    carminecrr non  in linea Novello
    Post
    34
    Like Inviati  
    0
    Like Ricevuti  
    0
    Si non avevo copiato tutto il codice, che posto tutto in questo messaggio, per mi restituisce un errore riferito a:

    InStr(1, Testo657, ArrTesto620(i))



    Codice provato:

    Private Sub CasellaCombinata65_AfterUpdate()
    Dim Testo657 As String
    Dim Testo620 As String
    Dim Testo659 As Integer

    Testo657 = Me.Testo657
    Testo620 = Me.Testo620
    Dim arrTesto620() As String
    Dim i As Integer
    arrTesto620 = Split(Testo620, " - ")
    For i = 0 To UBound(arrTesto620)
    InStr(1, Testo657, ArrTesto620(i))
    Next
    Testo659 = InStr(0, Testo657, Testo620, vbTextCompare)

    If Testo659 = 0 Then
    MsgBox """" & " L 'AUDITOR NON HA L'AREA TECNICA PER POTER CONDURRE DA SOLO L'AUDIT, SCEGLIERE UN AUDITOR IN POSSESSO DELL'AREA TECNICA:" & Chr(13) & Chr(10) & """" & Me.Testo620 & """"

    End If

    End Sub

  8. #8
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Si non avevo copiato tutto il codice, che posto tutto in questo messaggio, per mi restituisce un errore riferito a:

    InStr(1, Testo657, ArrTesto620(i))

    Codice provato:

    Private Sub CasellaCombinata65_AfterUpdate()
    ...
    Testo659 = InStr(0, Testo657, Testo620, vbTextCompare)
    L'ho riscritto completamente sopra, per intero. Cosa ci fa ancora
    Testo659 = InStr(0, Testo657, Testo620, vbTextCompare)
    
    l in mezzo? Riguardo tutto.
    Guardato. Quello che ti ho scritto giusto, funziona, guarda il post precedente. Sistema la msgbox: servono davvero tutti quegli apici, doppi apici ecc?
    Ultima modifica di Phil_cattivocarattere; 16-10-2014 16:24 

  9. #9
    carminecrr non  in linea Novello
    Post
    34
    Like Inviati  
    0
    Like Ricevuti  
    0
    Scusa non mi usciva tutto il tuo messaggio in precedenza, veniva troncato dove hai scritto IF.

    Ora provo.
    Grazie Mille

  10. #10
    Post
    1,816
    Like Inviati  
    0
    Like Ricevuti  
    4
    Quote Originariamente inviato da carminecrr Visualizza il messaggio
    Scusa non mi usciva tutto il tuo messaggio in precedenza, veniva troncato dove hai scritto IF.
    Per conoscere i dettagli, digitare [Split] nella guida in linea di VBA Access (spesso in italiano) o fare click qui Split Function

+ Rispondi al messaggio

Potrebbero interessarti anche ...

  1. [Access 2010 ] ricerca dati emulazione motore ricerca
    Da max-paso nel forum Microsoft Access
    Risposte: 9
    Ultimo Post: 14-03-2012, 14:51
  2. [access] ricerca stringa infile di testo
    Da mistral.bo nel forum Microsoft Access
    Risposte: 2
    Ultimo Post: 08-06-2009, 22:41
  3. Ricerca Testo
    Da Skary nel forum Visual Basic 6
    Risposte: 2
    Ultimo Post: 20-07-2008, 18:59
  4. Ricerca del testo in Excel
    Da hetabeta nel forum Visual Basic .Net
    Risposte: 0
    Ultimo Post: 24-06-2008, 16:46
  5. Ricerca Testo
    Da Psycho nel forum Visual Basic 6
    Risposte: 14
    Ultimo Post: 01-08-2005, 22:40