Condividi:        

errore 1004 nel metodo .select per la classe Range

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

errore 1004 nel metodo .select per la classe Range

Postdi romeos » 02/03/14 16:35

salve atutti, in un modulo di un file excel ho questo codice
Codice: Seleziona tutto
Sub provaincolla()
Sheets("classificamaschile").Range(" A3:B16").Copy
Windows("classifiche.xlsm").Activate
Sheets("Foglio1").Range("A1").Select


Riga = Range("A65536").End(xlUp).Row + 2
Range("A" & Riga).Select
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
        :=False, Transpose:=False

End Sub
se do il comando da quella posizione (cioè dal modulo) fa il suo lavoro, ma ho l'esigenza di farlo partire da un commandbutton ed in questo caso mi da errore di run time 1004,errore nel metodo select per la classe range, facendo debug mi segnala un errore qui:
Range("A" & Riga).Select
grazie anticipatamente a chiuque volesse aiutarmi e spiegarmi il perchè accade ciò,
"Lo spirito è un pendolo,tra la resa e il coraggio"
EXCEL 2010
romeos
Utente Junior
 
Post: 52
Iscritto il: 11/12/12 13:14

Sponsor
 

Re: errore 1004 nel metodo .select per la classe Range

Postdi Zer0Kelvin » 02/03/14 18:03

romeos ha scritto:Sheets("Foglio1").Range("A1").Select

Range("A" & Riga).Select

Dall'errore che ricevi sembra che tu stia cercando di attivare una cella che non si trova nel foglio attivo.
Prova a "Qualificare" il range, cioè a specificare di quale foglio fa parte quel range, come hai fatto sopra.
Poi un consiglio: i vari select e activate che vedi in giro nel WEB sono un'eredità di codici riadattati di macro registrate.
Non sono però consigliabili, perchè generano confusione e spesso errori. Nel 99% dei casi non hai bisogno di usare Select o Activate per accedere ad un Range o Foglio.
Il sistema corretto è utilizzare i qualificatori.
Esempio.
Codice: Seleziona tutto
Sub aaa()
    Sheets("Foglio1").Activate
    Range("A1").Select
    ActiveCell.Copy
End Sub

è un tipico esempio di codice prodotto dal registratore di macro, e in molti casi và anche bene, ma non sempre.
Il codice precedente è eqivalente a
Codice: Seleziona tutto
Sub aaa2()
    Sheets("Foglio1").Range("A1").Copy
End Sub

non ho bisogno di attivare o selezionare nulla, Excel capisce a quale cella mi riferisco, senza possibilità di equivoci.

E comunque, vedi se ti funziona questo
Codice: Seleziona tutto
Sub provaincolla()
Dim riga As Long
    Sheets("classificamaschile").Range(" A3:B16").Copy
    With Workbooks("classifiche.xlsm").Sheets("Foglio1")
        riga = .Range("A65536").End(xlUp).Row + 2
        .Range("A" & riga).PasteSpecial Paste:=xlPasteValues
    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: errore 1004 nel metodo .select per la classe Range

Postdi romeos » 02/03/14 19:15

il codice che mi hai postato funziona benissimo e ti ringrazio infinitamente dell'aiuto, purtroppo non so molto di vba ed è naturale che i miei codici facciano largo uso del registratore di macro,sono un 50enne neofita che cerca di capirci qualcosa, a questo proposito vi chiederei una spiegazione più generale di ciò che è accaduto ed in particolare una risposta alle domande:
1) come può un codice macro funzionare benissimo se posto all'interno di un modulo e generare un errore all'interno di un pulsante?
2) con quale regola stabilisco dove va inserito il codice (modulo,pulsante,foglio,personal ecc)?
Ancora grazie a Zer0Kelvin per l'aiuto e a tutti coloro abbiano la voglia e la pazienza di rispondere alle mie domande .
"Lo spirito è un pendolo,tra la resa e il coraggio"
EXCEL 2010
romeos
Utente Junior
 
Post: 52
Iscritto il: 11/12/12 13:14

Re: errore 1004 nel metodo .select per la classe Range

Postdi Anthony47 » 04/03/14 00:30

La macro iniziale contiene
Sheets("Foglio1").Range("A1").Select
Riga = Range("A65536").End(xlUp).Row + 2
Range("A" & Riga).Select
Se la macro e' posizionata in un Modulo standard allora le istruzioni 2 e 3 fanno riferimento al foglio attivo, quindi a Foglio1.
Quando invece lo stesso codice lo inserisci in un modulo di classe (ad esempio il modulo di codice di Foglio2), le stesse istruzioni faranno riferimento invece al Foglio2, col risultato che la riga 3 cerca di selezionare una cella sul foglio non attivo, cosa che non e' possibile e che quindi genera l' errore.
Ovviamente anche il calcolo di Riga e' sbagliato, perche' calcolato sul contenuto di Foglio2 e non di Foglio1.
Fortunatamente la .Select e' quasi sempre inutile e puo' essere evitata, indicando esplicitamente foglio / indirizzo delle celle da manipolare, ed evitando in questo modo anche equivoci legati a riferimenti di default; come ha fatto correttamente Z0K nel suo intervento.

Le macro di evento vanno inserite nei moduli dei fogli a cui l' evento fa riferimento (per non sbagliare, tasto dx sul tab col nome foglio, scegli Visualizza codice per andare nel foglio giusto); il codice di Userform va in un suo modulo di codice (per non sbagliare2, partendo dalla userform usa il comando Visualizza codice per andare nel foglio giusto, oppure premi F7); il codice dei controlli ActiveX vanno nel modulo del foglio che ospita quei controlli (per non sbagliare3, seleziona il controllo e usa il comando Visualizza codice per andare nel foglio giusto). Le altre macro e le Function da te sviluppate le metterai in un Modulo standard (quello che si genera con Menu /Inserisci /Modulo).

Puoi inserire nel tuo Personal.xls Macro e Function che pensi di tenere sempre a portata di mano.

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

Re: errore 1004 nel metodo .select per la classe Range

Postdi romeos » 05/03/14 05:39

grazie mille dei chiarimentii anthony47 faro mie queste spiegazioni che sono sicuro mi torneranno utili in futuro, ed un grazie esteso a tutto il forum che come al solito non è mancato nel chiarire e risolvere problemi.Ciao a tutti, a presto.
"Lo spirito è un pendolo,tra la resa e il coraggio"
EXCEL 2010
romeos
Utente Junior
 
Post: 52
Iscritto il: 11/12/12 13:14

Re: errore 1004 nel metodo .select per la classe Range

Postdi Wikipino » 10/11/14 15:36

Salve a tutti
scusate se utilizzo un post aperto ma ho un problema simile
premetto che non so nulla di VBA e che utilizzo le macro registrandole ( non ho alternativa non conoscendo VBA)
tuttavia è la prima volta che mi capita che una macro registrata non funzioni
la macro è semplicissima e mi serve per aggiungere un pulsante nella barra di accesso rapido che mi faccia incollare i valori copiati da una cella moltiplicandoli per il valore inserito in un'altra cella
in pratica devo fare Incolla speciale "valori" e "moltiplica" con un solo click

la macro registrata mi appare così

Sub AAA()
'
' AAA Macro
'
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlMultiply, _
SkipBlanks:=False, Transpose:=False

End Sub


quando la vado a eseguire mi dà un errore uguale al titolo del post
" errore 1004 nel metodo .select per la classe Range"

sapete dirmi che cosa succede e perchè dà errore?
Wikipino
Utente Junior
 
Post: 19
Iscritto il: 10/11/14 15:24

Re: errore 1004 nel metodo .select per la classe Range

Postdi Anthony47 » 10/11/14 17:04

Ciao Wikipino, benvenuto nel forum.
La macro si occupa solo di fare "incolla speciale"; il "Copia" (propedeutico all' Incolla speciale) lo fai a mano prima di avviare la macro, vero?
Avatar utente
Anthony47
Moderatore
 
Post: 19221
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: errore 1004 nel metodo .select per la classe Range

Postdi Wikipino » 10/11/14 19:30

Sì, esatto
la voglio così in modo che sia generica e non riferita a una particolare cella
copio la cella , seleziono quelle su cui devo fare l'incolla speciale e clicko sul pulsante riferito alla macro che dovrebbe incollare i valori e moltiplicare
solo che mi compare l'errore
Wikipino
Utente Junior
 
Post: 19
Iscritto il: 10/11/14 15:24

Re: errore 1004 nel metodo .select per la classe Range

Postdi Anthony47 » 11/11/14 03:40

Evidentemente quando arrivi all' Incolla-Speciale il "Copy" e' stato gia' cancellato; te ne accorgi perche' il contorno della cella copiata non e' piu' lampeggiante. Perche' succede devi capirlo esaminando il percorso che segui da quando fai Copia a quando avvii la macro.

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

Re: errore 1004 nel metodo .select per la classe Range

Postdi Zer0Kelvin » 11/11/14 07:15

Ciao.
Un'ipotesi è che, se il copia/incolla viene eseguito fra fogli diversi, esista una routine WorkSheet_Activate oppure WorkSheet_DeActivate in uno dei due fogli; oppure, nello stesso foglio, una Selection_Change.
L'esecuzione di una routine di evento fra il copia e l'incolla può facilmente far perdere il contenuto degli appunti.

A parte questo, non ci si accoda ad un altro post per porre un quesito:
1) costringi il lettore a leggere il post per intero prima di arrivare al tuo quesito
2)il tuo problena non ha nulla a che vedere col post originario.
La prossima volta apri un nuovo thread per favore.
[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: errore 1004 nel metodo .select per la classe Range

Postdi Wikipino » 11/11/14 11:21

Grazie Anthony 47
il problema era così banale
il fatto è che per far partire la macro spingevo ALT+F8 e poi facevo esegui macro
solo che non mi ero accorto che con questa operazione il "copy" si cancellava ( non so perchè succede )
per risolvere il problema è bastato mettere un pulsante sulla barra di accesso rapido che fa riferimento alla macro così il copy mode non si annulla
Grazie , problema risolto

Chiedo scusa a Zer0Kelvin per il mio errato uso del Forum
la prossima volta aprirò un nuovo thread
Grazie
Wikipino
Utente Junior
 
Post: 19
Iscritto il: 10/11/14 15:24

Re: errore 1004 nel metodo .select per la classe Range

Postdi Zer0Kelvin » 11/11/14 14:46

Il sistema più semplice è associare un tasto alla macro:
-Alt-F8
-Selezioni la macro
-Clicchi opzioni
-Imposti il tasto che vuoi associare.
Dopo potrai usare la macro pigiando CONTROL+tasto.

PS: non devi mica chiedere scusa; le mie erano solo "istruzioni per l'uso".
[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


Torna a Applicazioni Office Windows


Topic correlati a "errore 1004 nel metodo .select per la classe Range":


Chi c’è in linea

Visitano il forum: Nessuno e 54 ospiti