Discussione:
VBA - funzione "Call"
(troppo vecchio per rispondere)
EnFo
2006-02-04 20:23:32 UTC
Permalink
Buongiorno a tutti ho un problema che non riesco a risolvere. Sto
predisponendo un file per il bilancio (partendo da una situazione
contabile).
Ogni foglio contiene dati del periodo N e dati dei periodi da N-1 a N-4,
in bilancio, e nelle relative analisi, questi ultimi valori devono
rimanere immutati anche se la riclassifica fatta ad esempio nel periodo
N-3 era sbagliata. A tal fine ho "definito dei nomi" per i vari periodi,
ho fatto in modo che si possano imputare i dati solo per il periodo N,
poi con delle macro tali importi vengono copiati come valori nei periodi
precedenti, partendo ovviamente da N-3 in N-4, N-2 in N-3, N-1 in N-2 e
infine N in N-1. Tali macro funzionano correttamente se eseguite
singolarmente.
Il problema sorge con la seguente macro che dovrebbe far in modo che in
tutti i vari fogli le varie macro "Copia" vengano eseguite:

Private Sub Copia_Periodi()
Dim Response As Integer
Dim Msg As String
Dim Style As Integer
Dim Title As String
'Evita lo sfarfallio
Application.ScreenUpdating = False
'Definisce il messaggio
Msg = " STATE COPIANDO I VALORI" _
& Chr(13) & "" _
& Chr(13) & "DAL 'PERIODO 0' AL 'PERIODO -1'" _
& Chr(13) & "" _
& Chr(13) & " CONTINUARE ?" _
'Definisce i pulsanti
Style = vbYesNo + vbCritical + vbDefaultButton2
'Definisce il titolo
Title = "A T T E N Z I O N E"
'Visualizza il messaggio
Response = MsgBox(Msg, Style, Title)
'L'utente sceglie il pulsante SI
If Response = vbYes Then
'Sprotegge il foglio
Unprotect Password:=""
Call Worksheets("ANAGRAFICA").Copia_ANAGRAFICA
'Protegge il foglio
Protect Password:="", DrawingObjects:=True, Contents:=True,
Scenarios:=True, UserInterfaceOnly:=True
EnableSelection = xlUnlockedCells
Worksheets("S.d.S.").Activate
Call Worksheets("S.d.S.").Copia_SdS
Worksheets("Analisi Indici").Activate
Call Worksheets("Analisi Indici").Copia_Analisi_Indici
Worksheets("Analisi Bilancio").Activate
Call Worksheets("Analisi Bilancio").Copia_Analisi_Bilancio
Worksheets("P.d.C. - INPUT").Activate
Call Worksheets("P.d.C. - INPUT").Copia_PdC_INPUT
Worksheets("ANAGRAFICA").Activate
Range("D18").Select
End If


L'errore che mi viene restituito, peraltro non a ogni esecuzione, è il
seguente:
"Errore di run-time '1004': Errore definito dall'applicazione o
dall'oggetto"


Saluti e grazie a chi saprà aiutarmi.


Enrico
Abbassa LA VOCE per rispondermi
Norman Jones
2006-02-04 22:43:28 UTC
Permalink
Post by EnFo
Buongiorno a tutti ho un problema che non riesco a risolvere. Sto
predisponendo un file per il bilancio (partendo da una situazione
contabile).
Ogni foglio contiene dati del periodo N e dati dei periodi da N-1 a N-4,
in bilancio, e nelle relative analisi, questi ultimi valori devono
rimanere immutati anche se la riclassifica fatta ad esempio nel periodo
N-3 era sbagliata. A tal fine ho "definito dei nomi" per i vari periodi,
ho fatto in modo che si possano imputare i dati solo per il periodo N, poi
con delle macro tali importi vengono copiati come valori nei periodi
precedenti, partendo ovviamente da N-3 in N-4, N-2 in N-3, N-1 in N-2 e
infine N in N-1. Tali macro funzionano correttamente se eseguite
singolarmente.
Il problema sorge con la seguente macro che dovrebbe far in modo che in
Private Sub Copia_Periodi()
Dim Response As Integer
Dim Msg As String
Dim Style As Integer
Dim Title As String
'Evita lo sfarfallio
Application.ScreenUpdating = False
'Definisce il messaggio
Msg = " STATE COPIANDO I VALORI" _
& Chr(13) & "" _
& Chr(13) & "DAL 'PERIODO 0' AL 'PERIODO -1'" _
& Chr(13) & "" _
& Chr(13) & " CONTINUARE ?" _
'Definisce i pulsanti
Style = vbYesNo + vbCritical + vbDefaultButton2
'Definisce il titolo
Title = "A T T E N Z I O N E"
'Visualizza il messaggio
Response = MsgBox(Msg, Style, Title)
'L'utente sceglie il pulsante SI
If Response = vbYes Then
'Sprotegge il foglio
Unprotect Password:=""
Call Worksheets("ANAGRAFICA").Copia_ANAGRAFICA
'Protegge il foglio
Protect Password:="", DrawingObjects:=True, Contents:=True,
Scenarios:=True, UserInterfaceOnly:=True
EnableSelection = xlUnlockedCells
Worksheets("S.d.S.").Activate
Call Worksheets("S.d.S.").Copia_SdS
Worksheets("Analisi Indici").Activate
Call Worksheets("Analisi Indici").Copia_Analisi_Indici
Worksheets("Analisi Bilancio").Activate
Call Worksheets("Analisi Bilancio").Copia_Analisi_Bilancio
Worksheets("P.d.C. - INPUT").Activate
Call Worksheets("P.d.C. - INPUT").Copia_PdC_INPUT
Worksheets("ANAGRAFICA").Activate
Range("D18").Select
End If
L'errore che mi viene restituito, peraltro non a ogni esecuzione, è il
"Errore di run-time '1004': Errore definito dall'applicazione o
dall'oggetto"
Saluti e grazie a chi saprà aiutarmi.
Enrico
Abbassa LA VOCE per rispondermi
Ciao Enfo,

Dove ha inserito questa macro?
La macro dovrebbe essere in un modulo standard - non in un modulo di
foglio.
Post by EnFo
Worksheets("ANAGRAFICA").Activate
Range("D18").Select
con

With Worksheets("ANAGRAFICA").Activate
.activate
.Range("D18").Select
End with

---
Regards,
Norman
Norman Jones
2006-02-04 22:58:39 UTC
Permalink
Ciao EnFo,

Aggiungerei che ciascuna delle le macro:

Copia_ANAGRAFICA
Copia_SdS
Copia_Analisi_Indici
Copia_Analisi_Bilancio
Copia_PdC_INPUT

dovrebbero eesere in un modulo standard anziché i moduli di foglio.
Normalmente, un modulo di foglio dovrebbe contenere soltanto le procedure di
evento di foglio.


---
Regards,
Norman
EnFo
2006-02-05 16:54:56 UTC
Permalink
Post by Norman Jones
Ciao EnFo,
Copia_ANAGRAFICA
Copia_SdS
Copia_Analisi_Indici
Copia_Analisi_Bilancio
Copia_PdC_INPUT
dovrebbero eesere in un modulo standard anziché i moduli di foglio.
Normalmente, un modulo di foglio dovrebbe contenere soltanto le procedure di
evento di foglio.
---
Regards,
Norman
Ciao Norman,
in effetti tutte le macro le ho scritte nei moduli dei singoli fogli,
ora provvedo a inserirle nel modulo standard.
Grazie mille.

Enrico
Abbassa LA VOCE per rispondermi.
Norman Jones
2006-02-05 17:04:12 UTC
Permalink
--
---
Regards,
Norman
Post by EnFo
Post by Norman Jones
Ciao EnFo,
Copia_ANAGRAFICA
Copia_SdS
Copia_Analisi_Indici
Copia_Analisi_Bilancio
Copia_PdC_INPUT
dovrebbero eesere in un modulo standard anziché i moduli di foglio.
Normalmente, un modulo di foglio dovrebbe contenere soltanto le procedure
di evento di foglio.
---
Regards,
Norman
Ciao Norman,
in effetti tutte le macro le ho scritte nei moduli dei singoli fogli, ora
provvedo a inserirle nel modulo standard.
Grazie mille.
Enrico
Abbassa LA VOCE per rispondermi.
Norman Jones
2006-02-05 17:05:43 UTC
Permalink
Ciao EnFo,
Post by EnFo
in effetti tutte le macro le ho scritte nei moduli dei singoli fogli, ora
provvedo a inserirle nel modulo standard.
Per ulteriori informazioni, vedi:

http://www.cpearson.com/excel/codemods.htm


---
Regards,
Norman
EnFo
2006-02-05 21:57:29 UTC
Permalink
Post by Norman Jones
Ciao EnFo,
Post by EnFo
in effetti tutte le macro le ho scritte nei moduli dei singoli fogli, ora
provvedo a inserirle nel modulo standard.
http://www.cpearson.com/excel/codemods.htm
---
Regards,
Norman
Grazie mille.

Enrico
Abbassa LA VOCE per rispondermi.

Continua a leggere su narkive:
Loading...