Condividi:        

Macro che scatta quando cambia dato in un altro file

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

Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 04/04/24 21:34

Ciao a tutti,
sono bloccato e non capisco se è perchè quello che vorrei non è possibile o se mi sto dimenticando qualche cosa..
Ho creato due file: Pippo.xlsm e Pluto.xlsm, i due file sono collegati in alcune celle ed il primo è quello su cui lavoro direttamente mentre il secondo riceve dati.
Entrambi i file sono aperti sul pc e quando modifico Pippo cambia anche Pluto.
Ora ho inserito una macro worksheet change nel file ricevente (Pluto), quindi in teoria quando modifico il file Pippo in una cella specifica il cambiamento rispettivo in Pluto dovrebbe far partire la macro.. e invece no. :roll:
Sto vaneggiando o dimenticando qualche cosa?
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Sponsor
 

Re: Macro che scatta quando cambia dato in un altro file

Postdi Ricky0185 » 05/04/24 09:18

Quando il codice VBA sta nel modulo di un altro workbook devi menzionarlo. Prova con
Codice: Seleziona tutto
Run "'Pluto.xlsm'!Pippo.Nomedellamacro"

ma non so se con il worksheet change funziona
Ricky0185
Utente Senior
 
Post: 269
Iscritto il: 10/12/19 20:38

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 05/04/24 11:31

Ricky0185 ha scritto:Quando il codice VBA sta nel modulo di un altro workbook devi menzionarlo. Prova con
Codice: Seleziona tutto
Run "'Pluto.xlsm'!Pippo.Nomedellamacro"

ma non so se con il worksheet change funziona

Grazie Ricky, c'è una cosa che non capisco questo pezzettino lo inserisco in Pluto o in Pippo?
Cioè essendo la macro sul secondo file Pluto, che è il ricevente, questo pezzettino lo dovrò inserire sempre in Pluto giusto?
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi Anthony47 » 05/04/24 11:52

La WorksheetChange scatta quando il cambiamento e' provocato da input dell'utente o da scrittura tramite macro; probabilmente ora hai inserito in Pluto delle formule tipo =[PIPPO.xlsm]Foglio1!A2, quindi non scatta l'evento.
Prova a gestire la cosa da WorksheetChange di Pippo, inserendo nel codice la scrittura in Pluto; del tipo
Codice: Seleziona tutto
Workbooks("Pluto.xlsm").Sheets("SuoFoglio").Range("IlRange").Value=Me.Target.Value
Guarda solo la sintassi, perche' i parametri sono ovviamente legati alla tua situazione
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che scatta quando cambia dato in un altro file

Postdi Ricky0185 » 05/04/24 13:17

Dopo quella di Anthony, sicuramente funzionante, altra soluzione.
Se il trasferimento dei valori tra Pippo (il 1°) e Pluto (il ricevente) avviene con macro, allora metti in coda alla macro trasferente la tua macro. Se avviene con formule allora mi creerei sul foglio origine un pulsantino che lanci la macro, ovviamente dopo il trasferimento.
Ricky0185
Utente Senior
 
Post: 269
Iscritto il: 10/12/19 20:38

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 05/04/24 14:09

Grazie Anthony.. ci provo.

Riky.. no ho semplicemente inserito una formula nelle celle con l'=
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 18/04/24 15:21

Anthony47 ha scritto:La WorksheetChange scatta quando il cambiamento e' provocato da input dell'utente o da scrittura tramite macro; probabilmente ora hai inserito in Pluto delle formule tipo =[PIPPO.xlsm]Foglio1!A2, quindi non scatta l'evento.
Prova a gestire la cosa da WorksheetChange di Pippo, inserendo nel codice la scrittura in Pluto; del tipo
Codice: Seleziona tutto
Workbooks("Pluto.xlsm").Sheets("SuoFoglio").Range("IlRange").Value=Me.Target.Value
Guarda solo la sintassi, perche' i parametri sono ovviamente legati alla tua situazione

Ciao Anthony, ho provato ad inserire il codice, ma ricevo errore.. è la sintassi di cui parlavi?
Immagine
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi Anthony47 » 18/04/24 20:07

Eh, l'errore di sintassi c'e' nel suggerimento di partenza: Target e' un parametro dell'evento non una proprietà /metodo del foglio. Insomma devi usare =Target.Value e non =Me.Target.Value
Ri-prova...
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 22/04/24 10:33

Sembra che qualche cosa funzioni, ma non come vorrei.

In pratica ho collegato, come aveva intuito Anthony il foglio1 di Pluto al foglio1 di Pippo tramite formula:
Esempio relativo la casella A1
Codice: Seleziona tutto
=[Pippo.xlsm]Foglio1!$A$1


File Pippo
Immagine

Il file Pippo che è il file da compilare è composto unicamente da questa macro:
In Foglio1
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
Workbooks("Pluto.xlsm").Sheets("Foglio1").Range("A1:C1").Value = Target.Value
End Sub


File Pluto
Immagine

Il file Pluto che è il file ricevente ed è così composto:

Modulo 1
Codice: Seleziona tutto
Sub Macro5()
'
' Macro3 Macro
'
'
    With ActiveWorkbook.WebOptions
        .RelyOnCSS = True
        .OrganizeInFolder = True
        .UseLongFileNames = True
        .DownloadComponents = False
        .RelyOnVML = False
        .AllowPNG = True
        .ScreenSize = msoScreenSize1024x768
        .PixelsPerInch = 96
        .Encoding = msoEncodingWestern
    End With
    With Application.DefaultWebOptions
        .SaveHiddenData = True
        .LoadPictures = False
        .UpdateLinksOnSave = True
        .CheckIfOfficeIsHTMLEditor = True
        .AlwaysSaveInDefaultEncoding = False
        .SaveNewWebPagesAsWebArchives = True
    End With
    With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
        "C:\Users\mrosini\Desktop\Pluto.htm", "ENTRATE", _
        "$A$1:$C$6", xlHtmlStatic, "Pluto_28591", "Pluto")
        .Publish (True)
        .AutoRepublish = False
    End With
    ChDir "C:\Users\mrosini\Desktop\online"
End Sub


Foglio1
Codice: Seleziona tutto
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Call Macro5

End Sub


Ora ogni volta che modifico Pippo nei campi A1 - C1 - E1 i campi collegati sul file Pluto cambiano, ma assumono tutti lo stesso valore (cioè l'ultimo dato immesso in Pippo) invece che mantenere ogni cella il suo dato specifico.

Immagine

Inoltre non salva il file in formato html e se seleziono una delle caselle riceventi sul file Pluto ricevo un errore

Immagine

Di cui riporto di seguito il debug
Immagine
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 22/04/24 12:42

Allego i files d'esempio qui
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi Anthony47 » 22/04/24 16:51

Il tuo messaggio contiene due aree di problema, che vanno sezionate

1) Cominciamo a dire che il file che viene compilato si chiama Sorg.xlsm e non pippo.xlsm, e il file da compilare di chiama Dest.xlsm e non pluto.xlsm; così dovrebbe essere piu' chiaro il loro ruolo.

2) Quando su Sorg scatta l'evento Worksheet_Change possono essere successi una varietà di cosa: hai cancellato una colonna, una riga, un intervallo; hai copiato da un gruppo di celle e incollato in altra posizione (modificando così un gruppo di celle), hai modificato una singola cella. E' ovvio che ognuna di queste situazioni necessita di una sua gestione, che non e' racchiudibile in una singola istruzione. Immagino anche che tu non voglia copiare "ogni" cella di Sorg sulla corrispondente cella di Dest (ma vuoi estrapolare qualche colonna tra le tante presenti su Sorg).
Tutte cose ignote

3) Al momento quindi l'unico codice che posso dare e' quello che copia in Dest il contenuto cambiato di Sorg nella stessa posizione se e' stata modificata una sola cella:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.CountLarge = 1 Then
    Workbooks("Dest.xlsm").Sheets("Foglio1").Range(Target.Address).Value = Target.Value
End If
End Sub

Va messo nel modulo vba del foglio di Sorg che si vuole "ricalcare" su file Dest-Foglio1
Per gestire situazioni diverse, tipo portare su Dest solo le colonne A-B-D-H di Sorg mettendole in A-B-C-D ci vuole un codice diverso.


4) sul file Dest in Foglio1 hai inserito una Sub Worksheet_SelectionChange per cui quando cambi selezione fai partire la Sub Macro5.
Ok, anche se non so valutare se l'interfaccia utente e' buona

5) La Sub Macro5 prova a fare la "pubblicazione" di un'area; qui ti va in errore l'istruzione cruciale, cioe' quella che prepara la Publish.
Evidentemente qualche parametro e' inserito male; la cosa piu' immediata che vedo e' che il parametro Sheet e' impostato su "Pluto", ma io nelle tue immagini non vedo un foglio Pluto.

C'e' anche da notare che di un problema di Publish ne avevamo parlato in passato, vedi viewtopic.php?p=656888#p656904, e il mio suggerimento era stato "metti solo i parametri necessari".
Quindi da una parte controlla se il foglio da pubblicare si chiama proprio Pluto e da un'altra prova mettendo nel comando solo i parametri indispensabili.
Infine, come detto nella discussione linkata, se il file html da compilare fosse occupato da altri processi ricorda che ti esce l'errore 1004
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 23/04/24 20:58

Grazie Anthony, ho molto su cui meditare e lavorare/sperimentare. Buona serata
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 24/04/24 13:38

Andrò a rivedere il post del salvataggio a tempo.
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi systemcrack » 24/04/24 17:24

Anthony47 ha scritto:3) Al momento quindi l'unico codice che posso dare e' quello che copia in Dest il contenuto cambiato di Sorg nella stessa posizione se e' stata modificata una sola cella:
Codice: Seleziona tutto
Private Sub Worksheet_Change(ByVal Target As Range)
'
If Target.CountLarge = 1 Then
    Workbooks("Dest.xlsm").Sheets("Foglio1").Range(Target.Address).Value = Target.Value
End If
End Sub


Ciao Anthony, ho un quesito, ma se il dato da riportare, dipendesse a sua volta da un'altra cella?

Esempio pratico:
Nel file Sorg in cella A1 immettiamo il dato e questo verrà visualizzato in cella A1 sul file Dest, conseguentemente (su Sorg) nella cella B1 che contiene la seguente formula:
Codice: Seleziona tutto
=SE(A1<>""; SE(B1=""; ADESSO(); B1); "")

verrà riportata l'ora del momento della modifica della cella A1.. come faccio a farla riportare (l'ora) anche nel file Dest?
Al momento non riesco a far visualizzare il dato.. la cella rimane vuota. :mmmh:
Avatar utente
systemcrack
Utente Senior
 
Post: 283
Iscritto il: 27/07/17 09:40

Re: Macro che scatta quando cambia dato in un altro file

Postdi Anthony47 » 24/04/24 18:29

Mah, dubito sempre delle formule che ammettono il riferimento circolare...

Intanto ricorda che siamo qui a usare la WorksheetChange su Sorg per popolare qualcosa su Dest perche' vogliamo che poi su Dest possa scattare una sua WorksheetChange e fare suoi lavori; questo per dire che puoi sempre usare formule (per riportare su Dest valori presenti su Sorg), se non ti interessa che scatti una WorksheetChange

Quindi la risposta piu' semplice al tuo quesito e': fallo con una formula, tipo
Codice: Seleziona tutto
=Se([Sorg.xlsm]Foglio1!B1<>"";[Sorg.xlsm]Foglio1!B1;"")


Altrimenti fallo nella WorksheetChange di Sorg; tipo
Codice: Seleziona tutto
If Range("A1").Value <> "" And Workbooks("Dest.xlsm").Sheets("Foglio1").Range("B1")="" Then
    Workbooks("Dest.xlsm").Sheets("Foglio1").Range("B1") = Now
Else
    If Range("A1").Value ="" Then Workbooks("Dest.xlsm").Sheets("Foglio1").Range("B1").ClearContents
End If
Avatar utente
Anthony47
Moderatore
 
Post: 19230
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "Macro che scatta quando cambia dato in un altro file":


Chi c’è in linea

Visitano il forum: Nessuno e 9 ospiti