Condividi:        

For-next

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

For-next

Postdi elios66 » 12/02/14 14:47

Ciao,
ho un problema con un ciclo for next utilizzato all'interno del seguente codice:

Codice: Seleziona tutto
With Worksheets("LIST").Range("A2")
    Riga = .CurrentRegion.Rows.Count

    For l = 1 To Riga
   
        If .Cells(l, 1).Value = TextBox4.Value Then
        Else
            If .Cells(l, 2).Value = TextBox5.Value Then
            Else
            If .Cells(l, 3).Value = TextBox6.Value Then
                MsgBox "Lista già in elenco!", vbExclamation
                Exit Sub
            End If
        End If
   
    Next l
End With


mi da come errore Next senza For
Non riesco a uscirne.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Sponsor
 

Re: For-next

Postdi Anthony47 » 12/02/14 15:08

Infatti ti manca uno di questi End if:
Codice: Seleziona tutto
                    End If
                End If
            End If
       
        Next l

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

Re: For-next

Postdi Flash30005 » 12/02/14 18:17

Leggi il post di Anthony
e poi cosa significa
Codice: Seleziona tutto
        If .Cells(l, 1).Value = TextBox4.Value Then
        Else

Tanto vale scrivere
Codice: Seleziona tutto
        If .Cells(l, 1).Value <> TextBox4.Value Then
       


e visto che hai due condizioni di questo tipo e una diversa allora
Codice: Seleziona tutto
       
'...
               If .Cells(l, 1).Value <> TextBox4.Value And  If .Cells(l, 2).Value <> TextBox5.Value Then
                            If .Cells(l, 3).Value = TextBox6.Value Then
                                  MsgBox "Lista già in elenco!", vbExclamation
                                Exit Sub
                          End If
               End If
'...
         

;)


P.s. secondo me, comunque c'è un errore "di valutazione" perché se vuoi sapere se sono già in elenco dovresti inserire = e non <> e mettere Or invece di And
Flash
Win10 + Office 2010 Ita
"Fotografica" al servizio dell'immagine
Avatar utente
Flash30005
Moderatore
 
Post: 8517
Iscritto il: 27/09/07 11:44
Località: Roma +o-

Re: For-next

Postdi Zer0Kelvin » 12/02/14 19:54

Ciao.
Penso che tu stessi cercando di ottenere qualcosa del genere
Codice: Seleziona tutto
Option Explicit

Sub xxx()
Dim l As Long, Riga As Long
    With Worksheets("LIST").Range("A2")
        Riga = .CurrentRegion.Rows.Count
        For l = 1 To Riga
            If (.Cells(l, 1).Value = TextBox4.Value) Or (.Cells(l, 2).Value = TextBox5.Value) Or (.Cells(l, 3).Value = TextBox6.Value) _
            Then
                MsgBox "Lista già in elenco!", vbExclamation
                Exit Sub
            End If
        Next l
    End With
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: For-next

Postdi elios66 » 13/02/14 08:49

Ciao Zer0Kelvin,

ho provato per primo il tuo codice, ma inserendo un doppione me lo aggiunge. Quindi non funziona.
Ora provo con le altre, e vediamo come va.
Io vorrei in pratica, come avete già capito, impedire un inserimento doppio.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: For-next

Postdi elios66 » 13/02/14 10:00

Sto provando così:
Codice: Seleziona tutto
    With Worksheets("Elenco").Range("A2")
        Riga = .CurrentRegion.Rows.Count
        For l = 1 To Riga
            If .Cells(l, 1).Value = TextBox4.Value Then
                MsgBox "Codice già in Elenco!", vbExclamation: TextBox4.SetFocus
                Exit Sub
            End If
            If .Cells(l, 2).Value = TextBox5.Value Then
             MsgBox "Titolo già in Elenco!", vbExclamation: TextBox5.SetFocus
                Exit Sub
            End If
            If .Cells(l, 3).Value = TextBox6.Value Then
                MsgBox "Sigla già in Elenco!", vbExclamation: TextBox6.SetFocus
                Exit Sub
            End If
                   
        Next l
    End With

ma non mi fa il controllo. Se metto "<>" si blocca dicendomi che è sempre esistente
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: For-next

Postdi Anthony47 » 13/02/14 10:23

Personalmente credo che capire cosa tu voglia fare guardando il codice che quella cosa non lo fa sia un po' da sadomaso... Quindi e' bene che descrivi cosa vuoi fare, quale e' la tua struttura dati e come hai cominciato a farlo, se vuoi dei suggerimenti affidabili.
Comunque credo sia pericoloso l'uso di CurrentRegion per determinare l' area utilizzata; quindi alla cieca ti direi di sostituire Riga = .CurrentRegion.Rows.Count con
Codice: Seleziona tutto
Riga = Evaluate("=Max(if(A1:E2000<>"""",row(A1:E2000),""""))")

Questa calcola l' ultima riga usata nell' intervallo A1:E2000 (se i dati da "inquadrare" sono su colonne diverse o il numero di righe da considerare sia superore a 2000, modifica di conseguenza).

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

Re: For-next

Postdi elios66 » 13/02/14 12:07

Ciao, pensavo si capisse :oops:
Comunque nel mio file ho un elenco di prodotti e man mano che ne arrivano di nuovi devo aggiungerli a questo elenco. Ho una form che fa questo. Li aggiungo e li elimino a seconda delle necessità. Però volevo evitare di inserire più volte lo stesso prodotto per svista. Sto cercando di far fare un controllo prima di inserire.
Ho provato il codice che hai postato. Non conosco l'istruzione, ma non è cambiato nulla. Pero che sia stato più chiaro. Fammi sapere.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: For-next

Postdi Zer0Kelvin » 14/02/14 10:31

Se il problema è "solamente" quello di controllare in una colonna se un valore è già presente, la / le soluzione/i possibile/i è /sono estremamente semplice/i.
Te ne illustro una "tanto per"; ho ipotizzato che:
1) le descrizioni da cercare si trovano in colonna A
2) il nuovo valore da inserire viene scritto in TextBox1
3) per inserire il nuovo valore nell'elenco clikki un pulsante (che ho chiamato CBInserimento)
Il codice seguente non inserisce nulla, è puramente dimostrativo!
Codice: Seleziona tutto
Option Explicit '<== dicharazione obbligatoria delle variabili
Option Compare Text '<== ignora la differenza fra maiuscole e minuscole

Private Sub CBInserimento_Click()
Dim fnd As Range
    With Worksheets("Elenco").Range("A:A")
        Set fnd = .Find(Me.TextBox1.Text)
    End With
    If fnd Is Nothing Then
        'il valore non è presente in elenco, quindi lo vado ad inserire
        MsgBox "Valore non presente, lo inserisco", vbInformation
    Else
        MsgBox "Valore già presente", vbCritical
    End If
    Set fnd = Nothing
End Sub
[Win7,Office2010]
Condividere la conoscenza aumenta la ricchezza di tutti(Z0°K)
Dai ad un uomo un pesce e lo avrai sfamato per un giorno;insegnagli a pescare e lo avrai sfamato per sempre(Confucio)
Il sonno della ragione genera mostri(Francisco Goya)
Avatar utente
Zer0Kelvin
Utente Senior
 
Post: 388
Iscritto il: 08/04/12 11:23

Re: For-next

Postdi elios66 » 17/02/14 21:01

Grazie per il suggerimento.
Ora lo adatto e lo provo.
A presto
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32

Re: For-next

Postdi elios66 » 18/02/14 09:14

Perfetto. Funziona come volevo. Grazie mille.
Win 8 - Office 2010

http://www.filedropper.com/
elios66
Utente Junior
 
Post: 48
Iscritto il: 04/02/14 18:32


Torna a Applicazioni Office Windows

Chi c’è in linea

Visitano il forum: Nessuno e 69 ospiti