Utilizzo non valido di Property



  • Utilizzo non valido di Property
    di Ale (utente non iscritto) data: 29/01/2016 14:12:06

    Buongiorno, questo frammento di macro mi da il problema sopra indicato.
    Dove sbaglio? (Mi evidenzia i Cells, che prima erano Range, ma non è cambiato nulla).
     
    riga2 = 78 'riga cella carico prova 1
        riga3 = 1 'riga cella EMT
        cont = 6
        Do Until cont = 6
            riga = riga - 1
            If cont = 3 Then
                riga2 = riga2 + 2
            End If
            Cells ("C" & riga2) >= Cells("L" & riga3) And Cells("C" & riga2) <= Cells("L" & riga3 + 1)
            Cells("I" & riga) = Range("M" & riga3 + 1)
            riga3 = riga3 + 1
            cont = cont - 1
        Loop



  • di patel data: 29/01/2016 18:28:26

    cells vuole la riga e la colonna, non puoi usarlo con la stessa sintassi di range





  • di Ale (utente non iscritto) data: 29/01/2016 18:58:51

    Come dicevo sopra, prima erano tutti Range, quindi il problema è un altro :/



  • di patel data: 29/01/2016 19:06:00

    allega il file





  • di Mohican1989 data: 30/01/2016 12:34:24

    Come ha già detto patel la sintassi di Cells() non è come quella che noi leggiamo per indicare una cella (A1, B2,C1) che sono invece utilizzate nella sintassi range().
    Al contrario bisogna inserire dei N RIGA e N COLONNA, Cells(NRIGA,NCOLONNA)che possono essere indicati come numeri (123456) o variabili contenenti gli stessi.

    Potresti provare a cambiare la sintassi con il codice che posto sotto, nel frattempo che alleghi il file.

    Perchè mai poi hai o hanno dovuto cambiare Range con cells se non si conosceva la sintassi ?  

    EDIT: modificato il codice, non mi sono accorto che l' ultima parte -> Cells("I" & riga)=RANGE("M" & riga3+1)
    c'è un range e non un cell
     
            Cells (3,riga2) >= Cells(12,riga3) And Cells(3,riga2) <= Cells(12,riga3 + 1)
            Cells(9,riga) = Range("M" & riga3 + 1)



  • di patel data: 30/01/2016 13:00:24

    cit. Ale
    Come dicevo sopra, prima erano tutti Range, quindi il problema è un altro :/

    2+3 = 6 sbagliato
    1+3 = 6 sbagliato
    secondo la tua teoria cambiando il 2 in 1 si ottiene sempre l'errore quindi 1 va bene





  • di Ale (utente non iscritto) data: 30/01/2016 14:15:30

    Grazie Mohican, provo.



  • di Ale (utente non iscritto) data: 02/02/2016 09:06:53

    Buondì.

    Con Cells mi crea problemi con i maggiore-uguale, ecc.
    Perciò, ignorando i Cells, che erano stati messi solo per prova, e rimettendo i Range, dov'è l'errore?
     
    riga2 = 78 'riga cella carico prova 1
        riga3 = 1 'riga cella EMT
        cont = 6
        Do Until cont = 6
            riga = riga - 1
            If cont = 3 Then
                riga2 = riga2 + 2
            End If
            Range ("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1)
            Range("I" & riga) = Range("M" & riga3 + 1)
            riga3 = riga3 + 1
            cont = cont - 1
        Loop



  • di patel data: 02/02/2016 10:50:14

    questa riga non ha senso
     
            Range ("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1)
    






  • di Ale (utente non iscritto) data: 02/02/2016 11:19:33

    Perché?



  • di patel data: 02/02/2016 11:38:35

    spiegami tu cosa vuoi fare con questa riga, io posso dire soltando che non è una riga valida in vba
    è come dire 4 > 3 e 3 < 4, a cosa serve ?





  • di Ale (utente non iscritto) data: 02/02/2016 14:26:39

    Devo riempiere una serie di celle ( Range("I" & riga2)) con alcuni valori ( Range("M" & riga3+1)), dopo aver fatto un controllo Range ("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1).

    Inizialmente, il codice era così:
     
    If Range("C78") >= 0 And Range("C78") <= Range("L231") Then
            Range("I83:I85") = Range("M231")
        End If
        If Range("C78") >= Range("L232") And Range("C78") <= Range("L233") Then
            Range("I83:I85") = Range("M233")
        End If
        If Range("C78") >= Range("L234") And Range("C78") <= Range("F33") Then
            Range("I83:I85") = Range("M235")
        End If
        If Range("C80") >= 0 And Range("C80") <= Range("L231") Then
            Range("I86:I88") = Range("M231")
        End If
        If Range("C80") >= Range("L232") And Range("C80") <= Range("L233") Then
            Range("I86:I88") = Range("M233")
        End If
        If Range("C80") >= Range("L234") And Range("C80") <= Range("F33") Then
            Range("I86:I88") = Range("M235")
        End If



  • di patel data: 02/02/2016 16:50:10

    e tu perché hai tolto if ... then ?





  • di Ale (utente non iscritto) data: 02/02/2016 17:15:03

    Patel, perdonami, se sai darmi una soluzione, scrivila.

    Sto cercando di semplificare la macro, poiché ha tantissime ripetizioni inutili, tra le quali quell'IF...THEN, se ci guardi.

    Sai dirmi cosa c'è di sbagliato nel codice? O sai aiutarmi a scriverne uno corretto?
     
    riga2 = 78 'riga cella carico prova 1
        riga3 = 1 'riga cella EMT
        cont = 6
        Do Until cont = 6
            riga = riga - 1
            If cont = 3 Then
                riga2 = riga2 + 2
            End If
            Range ("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1)
            Range("I" & riga) = Range("M" & riga3 + 1)
            riga3 = riga3 + 1
            cont = cont - 1
        Loop



  • di patel data: 02/02/2016 17:57:07

    per scrivere o correggere un codice occorrer sapere cosa deve fare e tu non l'hai mai spiegato e non hai voluto allegare il file.
    Mi viene il dubbio che non lo sai nemmeno tu e che stai facendo modifiche a casaccio.





  • di Ale (utente non iscritto) data: 02/02/2016 18:29:45

    Non sapendo cosa significa quell'errore, faccio fatica ad apportare modifiche sensate.
    Ti ho spiegato cosa deve fare quel pezzo di macro, e ti ho anche allegato la vecchia macro, in cui è molto più chiaro ed evidentemente il funzionamento.
    "Utilizzo non valido di Property" cosa significa? Cosa c'è, materialmente, di sbagliato in quello che ho scritto? Cosa include questo errore e come posso risolverlo?

    Grazie



  • di Mohican1989 data: 02/02/2016 19:43:50

    Aiutati per farti aiutare ^^
    puoi riallegare la macro ?



  • di Ale (utente non iscritto) data: 02/02/2016 20:04:31

    Macro nuova:

    riga2 = 78 'riga cella carico prova 1
    riga3 = 1 'riga cella EMT
    cont = 6
    Do Until cont = 6
    riga = riga - 1
    If cont = 3 Then
    riga2 = riga2 + 2
    End If
    Range ("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1)
    Range("I" & riga) = Range("M" & riga3 + 1)
    riga3 = riga3 + 1
    cont = cont - 1
    Loop

    Macro vecchia:

    If Range("C78") >= 0 And Range("C78") <= Range("L231") Then
    Range("I83:I85") = Range("M231")
    End If
    If Range("C78") >= Range("L232") And Range("C78") <= Range("L233") Then
    Range("I83:I85") = Range("M233")
    End If
    If Range("C78") >= Range("L234") And Range("C78") <= Range("F33") Then
    Range("I83:I85") = Range("M235")
    End If
    If Range("C80") >= 0 And Range("C80") <= Range("L231") Then
    Range("I86:I88") = Range("M231")
    End If
    If Range("C80") >= Range("L232") And Range("C80") <= Range("L233") Then
    Range("I86:I88") = Range("M233")
    End If
    If Range("C80") >= Range("L234") And Range("C80") <= Range("F33") Then
    Range("I86:I88") = Range("M235")
    End If



  • di Mohican1989 data: 02/02/2016 21:01:42

    Ok ma se posti il file possiamo vedere cos c'è all interno dei range e capire se è un problema di espressione o solo di sintassi.



  • di patel data: 03/02/2016 09:28:07

    Ale ha molto tempo da perdere e vorrebbe farlo perdere anche a noi





  • di Ale (utente non iscritto) data: 03/02/2016 10:23:36

    Ok Mohican, ho allegato il file al topic.
    Se hai bisogno di altro, chiedi pure.



  • di Mohican1989 data: 03/02/2016 23:43:32

    Avendo visto il file, a questo punto posso pensare come già ipotizzato da patel che tu non sappia cosa stai facendo, per lo meno quando stai andando a compilare il codice di VBA.

    Così la macro "funziona" se per funziona intendiamo che non si interrompe per errore.

    Detto ciò patel ti aveva già ribadito che il controllo che stavi cercando di fare se vie era un istruzione con IF evidentemente un motivo c era, IF CONDIZIONI THEN ISTRUZIONE END IF -> SE LE CONDIZIONI IN SEGUITO RIPORTATE RISULTANO VERE ALLORA ESEGUI L'ISTRUZIONE SUCCESSIVA ALTRIMENTI CONTINUA IL CODICE SENZA INSERIRE L'ISTRUZIONE POSTA TRA THEN E END IF.
    Se togli il costrutto if(if ... then...end if), è chiaro che il programma non sa cosa stai cercando di fare e anche per un essere umano non sarebbe intuibile. E come se al posto di dire SE 5+2=8 e 3+2=5 allora dimmi "GIUSTO" tu scrivi 5+2=8 e 3+2=5 GIUSTO, capisci che non è neanche intendibile tra persone pensanti figuriamoci da una macchina.Inoltre non sapevi neanche ci sono delle istruzioni da tenere fuori dal ciclo che permettono di azzerare il contatore e aumentare la riga di verifica di 1.
    Volevo aiutarti ma se non hai idea di quello che fai questo aiuto risulterà superfluo.
     
    Public Sub Compilazione()
        Dim riga, riga2, riga3, cont As Integer
    
        riga = 89
        riga2 = 78
        riga3 = 1
        cont = 6
        Do Until cont = 0
            riga = riga - 1
            If cont = 3 Then
                riga2 = riga2 + 2
            End If
            If Range("C" & riga2) >= Range("L" & riga3) And Range("C" & riga2) <= Range("L" & riga3 + 1) Then
            Range("I" & riga) = Range("M" & riga3 + 1)
            End If
            riga3 = riga3 + 1
            cont = cont - 1
        Loop
    End Sub



  • di Ale (utente non iscritto) data: 04/02/2016 06:50:11

    Ho tolto l'IF... THEN semplicemente perché non ero sicura che la macro riuscisse ad eseguire il controllo con celle non "fisse", cioè celle che "scorrono" con il contatore.

    Ho fatto programmazione a scuola, 5 anni fa. È già tanto che sia riuscita a scrivere il programma e farlo funzionare come si deve. Ora come ora sto solo cercando di migliorarlo e di eliminare le mille ripetizioni che contiene.

    Se sapevo risolvermi il problema, non chiedevo aiuto su un forum, ti pare?



  • di patel data: 04/02/2016 08:02:08

    Nessuno qui ha la sfera di cristallo, se non dici qual'è l'obiettivo della tua macro nessuno sarà in grado di aiutarti, sembra che sia un segreto.





  • di Ale (utente non iscritto) data: 04/02/2016 12:41:52

    Gesù. Non capisco se mi trolli o se sei serio.
    Devo compilare una serie di celle, le ho anche COLORATE DI GIALLO. Non mi sembra così difficile da capire.
    Quelle celle devono essere riempite con i valori nella tabellina a lato del foglio, facendo il controllo coi due valori sopra la tabella.
    Se nom capisci i riferimenti alle celle, ti scrivo il controllo in italiano, coi numeri.



  • di patel data: 04/02/2016 13:41:44

    il mio troll finisce qui