Condividi:        

Se aggiungo codice segnala errore sul nome

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

Se aggiungo codice segnala errore sul nome

Postdi M@rtyn@ » 07/07/13 19:44

Ciao, stò cercando di scrivere una macro ma ogni volta che aggiungo un ElseIf invece di segnalarmi errore alla riga delle nuove istruzioni mi segnala errore alla riga del nome, e dice Sub o Function non definita :?: Potete spiegarmi perche?
Codice: Seleziona tutto
Sub Pratica()
Dim x As Integer
x = 1
Range("H1").Activate
ActiveCell = x
Range("C1").Activate
If ActiveCell = x Then
Range("C2").Activate
End If
If ActiveCell = x Then
Range("A1").Activate
ElseIf ActiveCell <> x Then
Msg "Macro finita"
End If
If Range("A1").Activate Then
    Selection.Copy
    ActiveCell.Offset(0, 8).Range("A1").Select
    ActiveSheet.Paste
End If
MsgBox "Macro terminata"
End Sub
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Sponsor
 

Re: Se aggiungo codice segnala errore sul nome

Postdi ricky53 » 07/07/13 23:14

Ciao,
il tuo codice diciamo che necessità di ... rivisitazione.
Diverse istruzioni NON mi convincono ma non so cosa vuoi fare.

Sapendo cosa vuoi fare potremmo trovare la soluzione.

E' preferibile SEMPRE dire cosa si vuole fare ed accompagnare la descrizione con il codice piuttosto che fornire il codice e ...


Comunque la seguente istruzione è errata
Codice: Seleziona tutto
        Msg "Macro finita"


l'istruzione corretta è
Codice: Seleziona tutto
        MsgBox "Macro finita"


Oltre il messaggio di errore dovresti avere evidenziata, in blu, la stringa "Msg" ed in giallo il nome della macro ma solo dopo aver fatto click su "OK" del messaggio di errore

In attesa di tue nuove dopo "Macro finita" io metterei
Codice: Seleziona tutto
Exit Sub
ma ... è meglio sapere cosa vuoi fare !!!
Dice il vecchio saggio provare e riprovare è l'unica strada per imparare

Più chiara è la vostra spiegazione
Più immediata sarà la nostra soluzione


. . . . . . . . . .
S.O. W10; Office 2003-10-13-19-21
Avatar utente
ricky53
Utente Senior
 
Post: 4588
Iscritto il: 11/04/09 19:29
Località: Italia

Re: Se aggiungo codice segnala errore sul nome

Postdi M@rtyn@ » 10/07/13 18:29

Ciao, scusa per il ritardo ma per spiegare quello che voglio fare bisogna scegliere accuratamente le parole, in pratica voglio scrivere una macro abbastanza complicata (Per me complicatissima) un' istruzione alla volta. Ormai è da un pò che con l'aiuto del registratore e dei forum uso le macro questa volta mi sembra di conoscere tutte le istruzioni che mi servono ma ho trovato difficoltà ad inserire "ElseIf". (Purtroppo puntavo molto su questa istruzione non conoscendone tante.)
Chiarisco subito che non mi ero accorta di aver sbagliato a scrivere MsgBox ma una volta corretto mi da lo stesso errore.
I MsgBox non dovrebbero far parte della macro finita ma solo farmi sapere che l'esecuzione del codice fino li è andata a buon fine
(Vedi "scrivere una macro...un'istruzione alla volta").

La macro completa dovrebbe essere:
Dato un valore x
Controlla se C1 è uguale a x
se non è uguale a x passa al foglio seguente
se è uguale a x controlla che anche C2 sia uguale a x
se non è uguale a x passa al foglio seguente
se é uguale a x copia A1 del foglio attivo in A1 del foglio "Elenco" e copia C1:G1 del foglio subito dopo quello attivo in B1:F1 del foglio "Elenco" e copia C2:G2 del foglio subito dopo quello attivo in H1:L1 del foglio "Elenco"
(se ho fatto confusione chiarisco che per foglio attivo intendo quello che contiene C1 e C2)
passa al foglio seguente e ricomincia

Per creare l'elenco dovrebbe andare qualcosa tipo Rows+1/Rows.Count, 1 se devo essere sincera così col codice scritto in Italiano non saprei proprio dove metterlo, provabilmente in VBA lo metterei all' inizio dove copia i dati anche se mi rimane una riga vuota in alto io faccio finta di non vederla.

Comunque il problema dell'errore (Sub o Function non definita) all'inserimento di nuovo codice me lo dava l'ElseIf, prima di inserire i MsgBox come controllo ho provato anche ad attivare una cella nello stesso foglio per fare una cosa semplice che due righe sopra mi riusciva.

Spero di essere stata chiara.
Ciao.
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Re: Se aggiungo codice segnala errore sul nome

Postdi Flash30005 » 10/07/13 19:10

Procediamo per passi
L'intera macro da te pubblicata nel primo post può essere sostituita da questa
Codice: Seleziona tutto
 Sub Pratica3()
    Dim x As Integer
    x = 1
    Range("H1").Value = x
    If Range("C1").Value = x And Range("C2").Value = x Then
        Range("A1").Copy Destination:=Range("A1").Offset(0, 8)
        MsgBox "Copia Effettuata, Macro terminata"
        Exit Sub
    Else
        MsgBox "Non tovata corrispondenza Macro finita"
    End If
    Range("A1").Activate
End Sub


che non passa ad altri fogli come spiegato nell'ultimo post
ma fa la copia di A1 in I1 per via dell'Offset di 8 colonne
per la seconda parte (o secondo passo) dovresti pubblicare il file con i dati da copiare

ciao
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: Se aggiungo codice segnala errore sul nome

Postdi M@rtyn@ » 12/07/13 17:14

Ciao a tutti, grazie per l'aiuto, ora ho un altro problema, questa macro non funziona ma non mi segnala nessun errore, il mio Visual Basc si è arreso!
Ho commentato le parti che avevo inserito come escamotage.
Codice: Seleziona tutto
Sub Pratica3()
 Dim FoglioRicerca As Worksheet
 Dim FoglioElenco As Worksheet
 Dim x As Integer
 Set FoglioElenco = ThisWorkbook.Worksheets("Elenco")
    x = 1
    'Range("H1").Value = x
    For Each FoglioRicerca In ThisWorkbook.Worksheets
      If Range("C1").Value = x And Range("C2").Value = x Then
         Range("A1").Copy Destination:=FoglioElenco.Range("A1")
         Range("C1:G1").Copy Destination:=FoglioElenco.Range("B1:F1")
         Range("C2:G2").Copy Destination:=FoglioElenco.Range("H1:L1")
         Range("A1").Activate
             ' MsgBox "Copia Effettuata, Macro terminata"
        Exit Sub
Else

       ' MsgBox "Non tovata corrispondenza Macro finita"
With ThisWorkbook
If .ActiveSheet.Index < .Sheets.Count Then
.Sheets(ActiveSheet.Index + 1).Select
End If
End With

    End If
    Next
End Sub
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Re: Se aggiungo codice segnala errore sul nome

Postdi Flash30005 » 12/07/13 17:27

Devi selezionare il foglio dal quale prelevi i dati altrimenti copierà solo i dati del foglio attivo
quindi ho modificato la macro e inserita la nota della modifica
Codice: Seleziona tutto
    Sub Pratica4()
     Dim FoglioRicerca As Worksheet
     Dim FoglioElenco As Worksheet
     Dim x As Integer
     Set FoglioElenco = ThisWorkbook.Worksheets("Elenco")
        x = 1
        'Range("H1").Value = x
        For Each FoglioRicerca In ThisWorkbook.Worksheets
        FoglioRicerca.Select     '<<<<<<<<<<<<<<<<<<<< seleziona ogni volta il foglio per renderlo attivo
          If Range("C1").Value = x And Range("C2").Value = x Then
             Range("A1").Copy Destination:=FoglioElenco.Range("A1")
             Range("C1:G1").Copy Destination:=FoglioElenco.Range("B1:F1")  '<<<< qui copierai sempre nelle stesse celle ???
             Range("C2:G2").Copy Destination:=FoglioElenco.Range("H1:L1") '<<<< qui copierai sempre nelle stesse celle ???
             Range("A1").Activate
                 ' MsgBox "Copia Effettuata, Macro terminata"
            'Exit Sub   '<<<<<<<<<< elimina questo Exit sub altrimenti scansioni saolo il primo foglio e la macro finisce senza fare il loop
    Else
    ' MsgBox "Non tovata corrispondenza Macro finita"

'<<<<<<<<<<<<<< le riche che seguono non so a cosa servano pertanto le ho commentate
    'With ThisWorkbook
    'If .ActiveSheet.Index < .Sheets.Count Then
   ' .Sheets(ActiveSheet.Index + 1).Select
   ' End If
  '  End With

        End If
        Next
    End Sub


Ciao
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: Se aggiungo codice segnala errore sul nome

Postdi M@rtyn@ » 13/07/13 10:16

Ciao, grazie per l'aiuto.
Queste ultime righe
Codice: Seleziona tutto
'<<<<<<<<<<<<<< le riche che seguono non so a cosa servano pertanto le ho commentate
    'With ThisWorkbook
    'If .ActiveSheet.Index < .Sheets.Count Then
   ' .Sheets(ActiveSheet.Index + 1).Select
   ' End If
  '  End With

Le ho rubate da un'altra macro per attivare il foglio successivo, praticamente per fare quello che tu hai fatto con
Codice: Seleziona tutto
 FoglioRicerca.Select     '<<<<<<<<<<<<<<<<<<<< seleziona ogni volta il foglio per renderlo attivo

Per far continuare l'elenco nella riga sotto ho provato ad inserire in diversi modi ----Row+1-----(1,0)-----FoglioElenco.Range("A" & Rows.Count).End(xlUp).Row ma Row+1 mi cancellava la+,mi è sorto il dubbio che sia un'istruzione di visual studio 2010 :?:
Gli altri ho provato in diversi modi studiando altre macro che creavano un elenco ma mi sfugge il meccanismo,poi quando ho scritto mi sono dimenticata di inserire un tentativo, per quello Visual Basic non mi dava più errore é tutta la mattina che riprovo e l'allarme di errore funziona benissimo.
Adesso ti posto il mio ultimo capolavoro, o me lo correggi o mi consigli un buon manuale,quello che ho usa le macro per fare quello che fanno gli strumenti, cambiare l'aspetto, i font, fare i grafici...
Codice: Seleziona tutto
Sub Pratica4()
         Dim FoglioRicerca As Worksheet
         Dim FoglioElenco As Worksheet
         Dim x As Integer
         x = 1
            For Each FoglioRicerca In ThisWorkbook.Worksheets
            FoglioRicerca.Select
            If Range("C1").Value = x And Range("C2").Value = x Then
                 Range("A1").Copy Destination:=FoglioElenco.Range("A1")
         Range("C1:G1").Copy Destination:=FoglioElenco.Range("B1:F1")
         Range("C2:G2").Copy Destination:=FoglioElenco.Range("H1:L1")
         End If
         y = FoglioElenco.Range("A" & Rows.Count).End(xlUp).Row
         For passo = 1 To Rows.Count Step 1
            Next
            Next
        End Sub

SOPRATTUTTO VORREI IMPARARE A USARE QUESTO
Codice: Seleziona tutto
.Range("A" & Rows.Count).End(xlUp).Row
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03

Re: Se aggiungo codice segnala errore sul nome

Postdi Flash30005 » 14/07/13 09:06

Il codice
Codice: Seleziona tutto
.Range("A" & Rows.Count).End(xlUp).Row

meglio conosciuto (poi con la pratica userai quello specifico)
è questo
Codice: Seleziona tutto
Pippo1 = worksheets("Foglio1").Range("A" & Rows.Count).End(xlUp).Row

dove indichi il foglio
serve a calcolare quante righe sono occupate nella colonna A
in pratica
Pippo1 = variabile pippo1 assume...
del worksheets("Foglio1") = foglio1
Range("A" & Rows.Count) = colonna A65536 (della colonna A dall'ultima riga in excel 2003)
End(xlUp).Row = a "salire"
Quindi se hai 450 righe compilate
Pippo1 sarà uguale a 450

Per quanto riguarda, invece, poter formattare caratteri etc etc
prova a registrare una macro prima di procedere ad una formattazione
poi interrompi la macro e vai a leggere il codice prodotto
E' più istruttivo e intuitivo di certi manuali ;)

Ciao
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: Se aggiungo codice segnala errore sul nome

Postdi M@rtyn@ » 14/07/13 09:16

Ciao, grazie.
xp con Excel 2007
windows 8 con excel 2013
M@rtyn@
Utente Junior
 
Post: 88
Iscritto il: 02/03/11 21:03


Torna a Applicazioni Office Windows


Topic correlati a "Se aggiungo codice segnala errore sul nome":


Chi c’è in linea

Visitano il forum: Nessuno e 7 ospiti