Condividi:        

Invio dati da foglio excel a pagina web ad ogni modifica

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

Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 26/01/21 15:15

Ciao a tutti ragazzi,
dopo diverso tempo che utilizzo un file da me creato e ampliato, anche grazie al vostro aiuto, torno a richiedervi una mano.

In pratica il file viene utilizzato per segnare l'etrata e l'uscita dei camion dal magazzino in cui lavoro.
Il file al momento è visibile solo da coloro che lavorano in ufficio, mentre sarebbe fantastico se fosse visibile anche a chi lavora in piazzale.
Ora, dovendo lavorare a costo 0 e di inventiva, avevo pensato di aprire un dominio gratuito e collegarlo in qualche modo al file Excel che una volta modificato in uno specifico range invia, (magari automaticamente con una macro), i dati alla pagina web del dominio gratuito.

Download File Excel

Ho cercato in lungo ed in largo, ma non sono riuscito a trovare nulla di soddisfacente, anche perchè la maggior parte della gente cerca per realizzare il procedimento inverso.

Grazie in anticipo a chiunque mi darà una dritta ;)
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Sponsor
 

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 27/01/21 10:24

Rileggendo il primo post devo ammettere che è un pò scarno di informazioni.. :roll: :lol:

Aggiungo allora che vorrei che l'input che scatena il procedimento di "comunicazione" tra file excel e pagina web (o qualsiasi altra cosa possa servire allo scopo) è il riempimento del range di campi da I2 a K161, che avviene tramite un bottone a cui è assegnata una macro che riporta l'orario (entrata e uscita) nella cella selezionata.

Immagine

Inoltre vorrei che il file che si genera sul server non sia uguale identico all'orinale: il range di celle/dati che mi interessa riportare è da A1 a K161.
Infine vorrei che il file generato sul server sia sempre lo stesso, che viene sovrascritto ad ogni "aggiornamento" di modo che non ci siano più file ma uno unico che si aggiornerà all'aggiornamento della pagina (web) stessa.

Immagine

Vorrei scusarmi anticipatamente per quanto riguarda questo secondo post, ma mi sono accorto della mancanza di dati solo stamane, quando ormai non potevo più modificare il primo.

Buona giornata a tutti! 8)
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 27/01/21 18:42

A costo zero puoi condividere un file con terzi usando un servizio di file sharing.
Ad esempio con Dropbox puoi salvare un file sul tuo Dropbox e renderlo accessibile ad un altro utente nel suo Dropbox (con cui hai condiviso una cartella di file); l'altro utente lo puo' aprire, modificare e salvare, consentendoti successivamente di aprirlo e vedere le sue modifiche.
Analogamente "l'altro" puo' compilare un suo file che diventa a te visibile e accessibile (se viene scritto nella carlella dropbox condivisA).
Come, usando questi file, si puo' cooperare e' tutta un'altra storia: perche' se la controparte modifica il file condiviso mentre lo stai modificando anche tu si creeranno dei conflitti che il sistema non puo' risolvere; io in genere suggerisco che ogni attore veda tutto o solo la sua parte, ma poi scrive solo la sua parte in un file che il supervisore raccoglie e assiema.

A costo zero puoi anche usare Excel on line, che pero' non gestisce le macro. O Google Spreadsheet, che ha un suo ambiente di scripting che io non frequento.

Ma con 100 camion da movimentare mi sembra strano che si debba procedere a costo zero; nel senso che le economie ottenibili sono tali da giustificare un investimento in sistemi che non siano strumenti "personali" ma aziendali. Chi non lo fa rimane inevitabilmente sempre meno competitivo.

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

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 28/01/21 10:00

Ciao Anthony47, ben ritrovato! Ti darei ampiamente ragione, se non vivessimo nell'Italia di oggi, ma la situazione è leggermente diversa e riconosco vi sia necessità di esporla in modo un po' più chiaro.

In primis bisogna dire che lavoro in un terminal portuale e non proprio in un magazzino, che però sta per essere venduto, non si sa bene ancora a chi, quindi la direzione non intende spendere un soldo al momento e con questo intendo che nel 2021 facciamo ancora la spunta cartacea!

Secondo, se prima ero in ufficio, quando ho iniziato questo progetto, ora sono in piazzale.. ovviamente ovunque vada a lavorare mi accorgo di mancanze che rendono il lavoro complesso e stressante sia per me che per i miei colleghi e così cerco dalla mia di migliorare dove posso.
Premesso questo il file condiviso con chi è all'esterno deve essere solo consultato.

Questo eviterà a me ed i miei colleghi di fare km durante il giorno, in quanto sapremo chi è entrato senza dover tornare in ufficio. Ma non solo aiuterà anche i ragazzi dell'ufficio che non dovranno continuamente avvisarci via radio. In certe occasioni, quando c'è molto traffico la situazione diventa caotica.

Se possibile eviterei l'installazione di programmi in quanto dovrei confrontarmi col programmatore, che a sua volta dovrebbe chiedere il permesso in direzione i quali in automatico direbbero di no senza nemmeno esaminare la proposta.

Ultimissima considerazione girando e girando ho trovato qualcosa che si avvicina, se non faccio male la link qui di seguito, magari si può adattare al mio scopo.. purtroppo non ho ancora avuto modo di sperimentare, ma conto questo week end di giocherellarci un po'.

Link: https://agiltools.com/blogsp/macro-ftp/

Buona giornata!

PS
Dimenticavo..! Chi è ora in ufficio, al posto mio, a malapena sa accendere il pc quindi è necessario che tutto sia automatizzato e che giri senza che venga attivato qualcosa di particolare.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 28/01/21 17:11

Se da fuori (quindi via browser) basta visualizzare qualcosa, allora se riesci a far funzionare la macro di upload potresti essere a cavallo...
Puoi infatti usare il salvataggio in formato "Pagine web" (htm /html), che crea un file htm principale + una directory di file di supporto; il file e la directory vanno caricate sul server web del tuo dominio, da cui il file htm principale puo' essere visualizzato via browser.

Ovviamente devi lavorare (in ufficio) con il file principale che all'occorrenza copia quel che serve su un nuovo file di servizio, di uno o piu' fogli, che e' quello che salverai in formato "Pagine web" prima di chiuderlo.
La stessa macro che crea il file di servizio, lo salva e lo chiude, deve avviare e gestire l'upload al server.

Per l'aggiornamento della visualizzazione sul browser so che ci sono estensioni per il browser in grado di farlo periodicamente, oppure si fa manualmente.

In alternativa all'upload verso un server web potresti valutare una vpn che ti dia l'accesso al server interno in cui il file di servizio viene salvato; risaprmieresti cosi' i tempi e le difficolta' di upload (che in certi momenti potrebbero farti visualizzare informazioni inconsistenti, se l'ulpoad e' in corso). Ma mi immagino le ansie sulla security della vpn...

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

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 29/01/21 09:28

Ciao Anthony47!
Allora ieri tra un camion e l'altro ho continuato a cercare e forse ho trovato una soluzione alternativa in una videoguida fatta da un ragazzo italiano, molto bravo, che oltre a spiegare passo passo, mette in descrizione il link di download dei file di esempio.
In questo caso è un mix tra powershell, VB e qualcos'altro. Ho controllato sul pc in questione e PS era già presente, mentre winscp me lo ha fatto installare senza chiedere permessi di amministrazione.. credo di essere a cavallo! Questo weekend ci giocherello un po' e posterò i risultati non appena i tests saranno positivi ;)
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 01/02/21 07:19

Allora.. come non detto.. le 2 guide precedenti non servono, infatti quello che serve è già insito in excel!
Il fatto è che io cercavo un setting generale da applicare a tutti i files, ma in realtà il collegamento ad un sito lo si decide al salvataggio del foglio su cui si sta lavorando.
In pratica si salva per il web e quando lo si fa si ottiene un menù a tendina aggiuntivo nella finestra di salvataggio in cui si sceglie la cartella di origine e quella di destinazione, per una sincronizzazione che può essere applicata in diversi modi (es. ftp., Server, ecc).
Un'altra cosa carina è che si può fregare la voce che automatizzata il processo di sincronizzazione ogni qual volta il file viene salvato. Ora mi manca solo la macro che salva come web ogni volta che si riempiono delle caselle specifiche ed il gioco è fatto!!!
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 01/02/21 17:22

Dopo un weekend e un inizio settimana di sperimentazioni, con excel, non posso che demordere. La procedura indicata da Microsoft non è chiara ed anche l'interfaccia utente non lo è. Ma ho trovato una soluzione grazie ad un piccolo software che si chiama FTPbox che sincronizza i files più recenti creati in una cartella locale con quelli di una cartella remota. Ora manca solo la creazione tramite macro di un salvataggio, in un percorso specifico, in formato htm (web) del file quando viene modificato in alcune celle.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 01/02/21 19:53

In questo tuo progetto la cosa piu' trigosa (secondo me) e' l'upload dei file dal pc al server web, che (per quanto ne so) va fatta con utility di sistema; e mi pare che tu avesi identificato due procedure che avevano la comodita' di poter essere invocate tramite macro. Quale e' invece la procedura Microsoft che ti ha fatto demordere?
Quale e' il vantaggio a usare FTPBox per copiare le cartelle su un altro server?

Per quanto riguarda il salvataggio in formato "Pagine web" (htm /html), mi pare l'avessi gia' delineato ma lo riepilogo:
-crei un nuovo file
-copi dal file originale al nuovo file le aree di tuo interesse
-salvi in formato "Pagine web" e chiudi il nuovo file

Un codice che fa queste cose:
Codice: Seleziona tutto
Workbooks.Add                                           'Crea nuovo file
ThisWorkbook.Sheets("Foglio1").Range("A2:H5").Copy            'Copia da file originale
Range("A1").PasteSpecial xlPasteValues                        'incolla sul nuovo file, valori ..
Range("A1").PasteSpecial xlPasteFormats                       '.. e altro che serve; esempio
Range("A1").PasteSpecial xlPasteColumnWidths                  '.. esempio
'...
'altre cose da copiare
'altre cose da copiare
'...
Application.CutCopyMode = False
Application.DisplayAlerts = False                           'Se si usa lo stesso NomeFile
ActiveWorkbook.SaveAs Filename:="C:\PercorsoCompleto\PROVA.htm", _
    FileFormat:=xlHtml, ReadOnlyRecommended:=False, CreateBackup:=False
Application.DisplayAlerts = True
ActiveWorkbook.Close , False                                'Chiude il file html

Immagino che lo aggancerai a una qualche procedura di WorksheetChange, ma io eviterei di trovarmi in situazioni di modifiche da salvare troppo frequenti, perche' creare un file e salvarlo non e' un attimo; e comunque la procedura di aggiornamento sul server web (se riesci ad automatizzarla) potrebbe richiedere "qualche secondo"; e comunque l'utente che consulta i dati sul web non e' che fa il refresh dei suoi dati ogni 10 secondi.
Insomma forse piu' che agganciarla a una WorksheetChange potrebbe essere utile agganciarla a una macro che esegui ogni tot minuti rischedulandola tramite OnTime.

Vedi tu...
Avatar utente
Anthony47
Moderatore
 
Post: 19419
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 01/02/21 20:10

Anthony47 ha scritto:In questo tuo progetto la cosa piu' trigosa (secondo me) e' l'upload dei file dal pc al server web, che (per quanto ne so) va fatta con utility di sistema; e mi pare che tu avesi identificato due procedure che avevano la comodita' di poter essere invocate tramite macro. Quale e' invece la procedura Microsoft che ti ha fatto demordere?


Quella insita in excel per collegarlo ad una cartella in remoto.. prossimamente farò un post solo su questo.

Anthony47 ha scritto:Quale e' il vantaggio a usare FTPBox per copiare le cartelle su un altro server?

Che rileva ogni cambiamento (anche aggiornamento di files) in una cartella da me scelta sul pc e lo carica automaticamente sulla cartella scelta sul server di altervista.

Anthony47 ha scritto:Immagino che lo aggancerai a una qualche procedura di WorksheetChange, ma io eviterei di trovarmi in situazioni di modifiche da salvare troppo frequenti, perche' creare un file e salvarlo non e' un attimo; e comunque la procedura di aggiornamento sul server web (se riesci ad automatizzarla) potrebbe richiedere "qualche secondo"; e comunque l'utente che consulta i dati sul web non e' che fa il refresh dei suoi dati ogni 10 secondi.
Insomma forse piu' che agganciarla a una WorksheetChange potrebbe essere utile agganciarla a una macro che esegui ogni tot minuti rischedulandola tramite OnTime.

Vedi tu...


Sai che questa idea non mi dispiace affatto.. magari da farlo girare una volta ogni minuto.
Io ho creato con il registra macro il codice che è venuto fuori così:
Codice: Seleziona tutto
Sub Macro3()
'
' Macro3 Macro
'

'
    With ActiveWorkbook.WebOptions
        .RelyOnCSS = True
        .OrganizeInFolder = False
        .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 = False
        .AlwaysSaveInDefaultEncoding = False
        .SaveNewWebPagesAsWebArchives = True
    End With
    With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
        "C:\Users\Marco\Documents\excel\schema entrate OGGI.htm", "ENTRATE", _
        "$A$1:$K$161", xlHtmlStatic, "schema entrate OGGI_28591", "Schema Entrate")
        .Publish (True)
        .AutoRepublish = False
    End With
    ChDir "C:\Users\Marco\Documents\excel"
End Sub


Come faccio a metterci la temporizzazione che dicevi tu?

Intanto grazie Anthony.. sei sempre gentilissimo!
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 01/02/21 20:34

Codice: Seleziona tutto
Sub Avvia()
    Tempo = Now + TimeValue("00:01:0")
    Application.OnTime Tempo, "Macro3"
End Sub

Sub Macro3()
'
' Macro3 Macro
'

'
    With ActiveWorkbook.WebOptions
        .RelyOnCSS = True
        .OrganizeInFolder = False
        .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 = False
        .AlwaysSaveInDefaultEncoding = False
        .SaveNewWebPagesAsWebArchives = True
    End With
    With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
        "C:\Users\Marco\Documents\excel\schema entrate OGGI.htm", "ENTRATE", _
        "$A$1:$K$161", xlHtmlStatic, "schema entrate OGGI_28591", "Schema Entrate")
        .Publish (True)
        .AutoRepublish = False
    End With


Credo di esserci.. così: con il valore impostato in questo modo Tempo = Now + TimeValue("00:01:0") dovrebbe essere 1 min giusto?
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 01/02/21 21:37

Non capisco perchè non va.. ho impostato 5 secondi per vedere se funziona, ma nada de nada :aaah
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 02/02/21 11:39

Non va perche' cosi' hai impostato 1 (una) esecuzione della Macro3 ; per ripetere devi inserire in coda a Macro3 la rischedulazione
Codice: Seleziona tutto
Sub Macro3()
'
'..
'..
    Tempo = Now + TimeValue("00:01:0")
    Application.OnTime Tempo, "Macro3"
End Sub


Comunque secondo me la frequenza di una volta al minuto e' eccessiva; vedi tu se non conviene portarla a 1 volta ogni 5 minuti.

Inoltre le macro "OnTime" hanno la tendenza ad arrestarsi se, quando dovrebbero eseguirsi, l'utente sta interagendo (inserimento o edit dati) con l'applicazione.

Per mitigare questa seconda situazione, la mia proposta e' di schedulare non solo una macro principale, ma anche altre macro di controllo ogni 15-30-60 minuti, che realizzano questo ragionamento:
-la macro 1Minuto (quella principale) controlla che la macro 15Minuti sia schedulata; se No, la rischedula. Poi fa il suo lavoro normale.
-la macro 15Minuti controlla che la macro 1Minuto sia schedulata, se No la rischedula; controlla che la macro 30Minuti sia schedulata, se No la rischedula. Infine rischedula sé stessa.
-la macro 30Minuti controlla che la macro 15Minuti sia schedulata, se No la rischedula; controlla che la macro 60Minuti sia schedulata, se No la rischedula. Infine rischedula sé stessa.
-la macro 60Minuti controlla che la macro 30Minuti sia schedulata, se No la rischedula; controlla che la macro 1Minuto sia schedulata, se No la rischedula. Infine rischedula sé stessa.

In questo modo se una schedulazione si interrompe ce n'e' un'altra successiva che dovrebbe riavviare il ciclo; le chance che si interrompano tutte dovrebbero essere molto piu' basse.

Un codice che fa questo, in un Modulo standard del vba:
Codice: Seleziona tutto
'RIGOROSAMENTE IN CIMA AL MODULO:
Public Next1Min As Date, Next15Min As Date, Next30Min As Date, Next60Min As Date
Dim StopAll As Boolean      'Stop all the schedules

'
'QUESTA E' LA TUA MACRO PRINCIPALE, quella che hai chiamato Macro3:
Sub OneMinuteMacro()                           'This is your 1 minute macro with amendments
If StopAll = False Then                        ' StopAll??
    If Next15Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
'
'  >>>> qui il tuo codice da eseguire nella macro <<<<
'
'Then Reschedue myself:
    Next1Min = Now + TimeSerial(0, 1, 2)
    Application.OnTime NextOneMin, "OneMinuteMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub


Codice: Seleziona tutto
Sub Macro15Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 2)
        Application.OnTime Next1Min, "OneMinMacro"
    End If
    If Next30Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 30, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
'Reschedue myself:
    NextOneMin = Now + TimeSerial(0, 14, 0)
    Application.OnTime NextOneMin, "Macro15Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub


Codice: Seleziona tutto
Sub Macro30Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next15Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
    If Next60Min < (Now - TimeSerial(0, 5, 0)) Then
        Next60Min = Now + TimeSerial(0, 59, 0)
        Application.OnTime Next60Min, "OneHourMacro"
    End If
'Reschedue myself:
    Next30Min = Now + TimeSerial(0, 30, 0)
    Application.OnTime Next30Min, "Macro30Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub


Codice: Seleziona tutto
Sub OneHourMacro()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next30Min < (Now - TimeSerial(0, 5, 0)) Then
        Next30Min = Now + TimeSerial(0, 30, 0)
        Application.OnTime Next30Min, "Macro30Min"
    End If
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 1)
        Application.OnTime Next1Min, "OneMinuteMacro"
    End If
'Reschedue myself:
    Next60Min = Now + TimeSerial(0, 59, 0)
    Application.OnTime Next60Min, "OneHourMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub


All'avvio ti basta lanciare solo la OneMinuteMacro, che si rischedulera' e contemporaneamente avviera' il ciclo delle macro di controllo; a scopo precauzionale e' pero' utile prima fermare ogni eventuale schedulazione presente. Insomma quando vuoi avviare il tutto:
Codice: Seleziona tutto
Sub Avvia()
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
    Call OneMinuteMacro
End Sub


Lo stesso dicasi quando si vuole chiudere il file (altrimenti rimangono valide le schedulazioni e il file verra' riaperto tra 1 minuto, 15 minuti etc); per questo puoi usare la macro di BeforeClose da inserire nel modulo ThisWorkbook:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End Sub


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

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 02/02/21 13:23

Ma quindi potrei inserire anche un comando inverso per attivare la Oneminutemacro invece che doverla lanciare io manualmente.. ?! Molto molto interessante.. ci giocherello un po' e ti faccio sapere.
Grazie Anthony47 la mia offerta è sempre valida per il pasto offerto in caso tu passi da ravenna. In alternativa se hai modo di ricevere, sarei anche ben lieto di farti una donazione per tutto l'aiuto che mi stai dando ;)
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 02/02/21 14:56

Anthony47 ha scritto:Lo stesso dicasi quando si vuole chiudere il file (altrimenti rimangono valide le schedulazioni e il file verra' riaperto tra 1 minuto, 15 minuti etc); per questo puoi usare la macro di BeforeClose da inserire nel modulo ThisWorkbook:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End Sub



Ciao Anthony, mi compare questo errore:
Immagine

Credo sia perchè è già presente il richiamo:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call Macro2


End Sub


Che richiama una macro che funge da salvataggio di sicurezza.
A questo punto immagino di dover unire la tua parte di codice a quella già presente?
Da ignorante ho fatto questo:
Codice: Seleziona tutto
Private Sub Workbook_BeforeClose(Cancel As Boolean)

Call Macro2
'
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0

End Sub


Ne approfitto inoltre per mostrarti l'altra risultante dei vari codici uniti alla mia macro:

Codice: Seleziona tutto
Public Next1Min As Date, Next15Min As Date, Next30Min As Date, Next60Min As Date
Dim StopAll As Boolean      'Stop all the schedules

'
'QUESTA E' LA TUA MACRO PRINCIPALE, quella che hai chiamato Macro3:
Sub OneMinuteMacro()                           'This is your 1 minute macro with amendments
If StopAll = False Then                        ' StopAll??
    If Next15Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
'
'  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\DA DUPLICARE schema entrate\online\schema-entrate.htm" _
        , "ENTRATE", "$A$1:$K$161", xlHtmlStatic, "schema entrate da dup1_6262", _
        "Schema Entrate")
        .Publish (True)
        .AutoRepublish = False
    End With
    ChDir "C:\Users\mrosini\Desktop\DA DUPLICARE schema entrate\online"
End Sub
'
'Then Reschedue myself:
    Next1Min = Now + TimeSerial(0, 1, 2)
    Application.OnTime NextOneMin, "OneMinuteMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub
Sub Macro15Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 2)
        Application.OnTime Next1Min, "OneMinMacro"
    End If
    If Next30Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 30, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
'Reschedue myself:
    NextOneMin = Now + TimeSerial(0, 14, 0)
    Application.OnTime NextOneMin, "Macro15Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub
Sub Macro30Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next15Min < (Now - TimeSerial(0, 5, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)
        Application.OnTime Next15Min, "Macro15Min"
    End If
    If Next60Min < (Now - TimeSerial(0, 5, 0)) Then
        Next60Min = Now + TimeSerial(0, 59, 0)
        Application.OnTime Next60Min, "OneHourMacro"
    End If
'Reschedue myself:
    Next30Min = Now + TimeSerial(0, 30, 0)
    Application.OnTime Next30Min, "Macro30Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub
Sub OneHourMacro()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next30Min < (Now - TimeSerial(0, 5, 0)) Then
        Next30Min = Now + TimeSerial(0, 30, 0)
        Application.OnTime Next30Min, "Macro30Min"
    End If
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 1)
        Application.OnTime Next1Min, "OneMinuteMacro"
    End If
'Reschedue myself:
    Next60Min = Now + TimeSerial(0, 59, 0)
    Application.OnTime Next60Min, "OneHourMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub
Sub Avvia()
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
    Call OneMinuteMacro
End Sub
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 02/02/21 16:50

systemcrack ha scritto:Ma quindi potrei inserire anche un comando inverso per attivare la Oneminutemacro invece che doverla lanciare io manualmente.. ?! Molto molto interessante.. ci giocherello un po' e ti faccio sapere.
Grazie Anthony47 la mia offerta è sempre valida per il pasto offerto in caso tu passi da ravenna. In alternativa se hai modo di ricevere, sarei anche ben lieto di farti una donazione per tutto l'aiuto che mi stai dando ;)

Mi spiego meglio, intendevo se si potesse fare in modo che la Oneminutemacro partisse all'apertura del foglio excel.. scusa i pensieri staccati, ma facendo dentro e fuori dall'ufficio ogni volta che riprovo e rileggo lo scambio di post, mi accorgo di mie mancanze o mi vengono nuovi dubbi :roll:
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 02/02/21 17:14

systemcrack ha scritto:Ma quindi potrei inserire anche un comando inverso per attivare la Oneminutemacro invece che doverla lanciare io manualmente.. ?! Molto molto interessante.. ci giocherello un po' e ti faccio sapere.
Grazie Anthony47 la mia offerta è sempre valida per il pasto offerto in caso tu passi da ravenna. In alternativa se hai modo di ricevere, sarei anche ben lieto di farti una donazione per tutto l'aiuto che mi stai dando ;)


Per quanto riguarda questo ho provato questo codice:

Codice: Seleziona tutto
Private Sub Workbook_Open()

Call OneMinuteMacro

End Sub


Ma ora restituisce un errore di cui ti allego lo screen:
Immagine Immagine

Se lo metto in Foglio1 non mi da errore il richiamo.. che sia la volta buona?

Questo è link per lo scarico ed uno screen che forse sarà più d'aiuto nella comprensione:

Immagine
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi systemcrack » 02/02/21 17:35

Abbi pazienza Anthony47.. giuro che è l'ultimo post :lol: questo link funziona per scaricare il file su cui lavoro.
Avatar utente
systemcrack
Utente Senior
 
Post: 454
Iscritto il: 27/07/17 09:40

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 02/02/21 19:56

Andando a caso con risposte e considerazioni...

Per l'errore "Riferimento non valido o non qualificato": c'e' un motivo che ti ha fatto eliminare (all'interno della Sub OneMinuteMacro) l'istruzione With ActiveWorkbook.WebOptions? Reinseriscila e ti troverai bene.

Se vuoi avviare le schedulazioni all'avvio del file allora in una ipotetica macro di Workbook_Open inserisci la pianificazione del lancio dopo 1 minuto:
Codice: Seleziona tutto
Private Sub Workbook_Open()
    Next1Min = Now + TimeSerial(0, 1, 2)
    Application.OnTime NextOneMin, "OneMinuteMacro"
End Sub

La fase di apertura di un file non e' immediata, meglio aspettare che si concluda prima di cominciare con le schedulazioni.
Anzi, per andare sul sicuro potresti inserire la pianificazione di tutte le macro, comprese quelle di controllo; cioe':
Codice: Seleziona tutto
Private Sub Workbook_Open()
    Next1Min = Now + TimeSerial(0, 1, 2)
    Application.OnTime NextOneMin, "OneMinuteMacro"
    NextOneMin = Now + TimeSerial(0, 14, 0)
    Application.OnTime NextOneMin, "Macro15Min"
    Next30Min = Now + TimeSerial(0, 30, 0)
    Application.OnTime Next30Min, "Macro30Min"
    Next60Min = Now + TimeSerial(0, 59, 0)
    Application.OnTime Next60Min, "OneHourMacro"
End Sub

Non e' necessario, perche' la OneMinuteMacro avvierebbe la Macro15Min, che poi avvierebbe la Macro30Min, e così per la OneHourMacro; ma se vengono avviate tutte abbiamo da subito tutti i paracadute.
Se ti chiedi perche' quei ritardi strani tra le macro (1'2"; 14'; 30', 59') li ho impostati cosi' per evitare "risonanze" (tipo che dopo un'ora devono essere eseguite tutte e quattro le macro contemporaneamente)

INOLTRE e' necessario che la Sub Workbook_Open sia inserita nel modulo ThisWorkbook (Questa_cartella_di_lavoro, nella tua versione), non nel modulo vba di Foglio1 o in un Modulo standard perche' altrimenti viene ignorata come "macro di evento" ma e' considerata una macro da avviare in altro modo.

Penso di fare cosa utile aggiungendo il codice che puoi usare per verificare se il castello funziona, cioe' questa riga da aggiungere in ognuna delle macro che abbiamo inserito (OneMinuteMacro, Macro15Min etc) subito dopo la riga "Reschedue myself"
Codice: Seleziona tutto
'Reschedue myself:
    NextOneMin = Now + TimeSerial(0, 14, 0)
    Debug.Print "Eseguo Macro15Min", Now            '<<< IL NOME giusto della macro
    Application.OnTime NextOneMin, "Macro15Min"

Questo esempio e' riferito alla Macro15Min, modifica il testo per le altre macro

Poi quando il file e' aperto (e le macro teoricamente in esecuzione periodica), vai sul vba e apri la "finestra Immediata" (dovrebbe bastare la combinazione Contr-g; oppure Menu /Visualizza /Finestra Immediata): qui dovresti trovare traccia di quando le macro vengono eseguite, con un messaggio tipo Eseguo OneMinuteMacro 02/02/2021 19:30; ogni 15 minuti dovrebbe comparire il msg della Macro15Min, ogni 30 e ogni 60 delle altre macro
Puoi anche lasciare queste istruzioni, non appesantiscono granche' i tempi di esecuzione.

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

Re: Invio dati da foglio excel a pagina web ad ogni modifica

Postdi Anthony47 » 03/02/21 02:20

Mi ero accorto di alcuni svarioni sul codice che avevo postato, ho trovato solo ora il tempo per ricontrollare e aggiustare.

Il codice complessivo delle macro "OnTime" dovrebbe essere:
Codice: Seleziona tutto
Public Next1Min As Date, Next15Min As Date, Next30Min As Date, Next60Min As Date
Dim StopAll As Boolean      'Stop all the schedules

'
'QUESTA E' LA TUA MACRO PRINCIPALE, quella che hai chiamato Macro3:
Sub OneMinuteMacro()                           'This is your 1 minute macro with amendments
If StopAll = False Then                        ' StopAll??
    If Next15Min < (Now - TimeSerial(0, 1, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)                   '15
        Application.OnTime Next15Min, "Macro15Min"
    End If
'
  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
'>>>>>>CORREGGI I PERCORSI COME DA TUA SITUAZIONE                                            <<<<<
    With ActiveWorkbook.PublishObjects.Add(xlSourceRange, _
        "D:\PROVA\schema-entrate.htm" _
        , "ENTRATE", "$A$1:$K$161", xlHtmlStatic, "schema entrate da dup1_6262", _
        "Schema Entrate")
        .Publish (True)
        .AutoRepublish = False
    End With
    ChDir "C:\Users\mrosini\Desktop\DA DUPLICARE schema entrate\online"                         '<<<<  SERVE??
'
'Then Reschedue myself:
    Next1Min = Now + TimeSerial(0, 1, 2)
    Debug.Print "Eseguo MacroOneMin", Now, Next1Min
    Application.OnTime Next1Min, "OneMinuteMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub

Sub Macro15Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 2)
        Application.OnTime Next1Min, "OneMinuteMacro"
    End If
    If Next30Min < (Now - TimeSerial(0, 1, 0)) Then
        Next30Min = Now + TimeSerial(0, 30, 0)               '30
        Application.OnTime Next30Min, "Macro30Min"
    End If
'Reschedue myself:
    Next15Min = Now + TimeSerial(0, 14, 0)                   '15
    Debug.Print "Eseguo Macro15Min", Now, Next15Min
    Application.OnTime Next15Min, "Macro15Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub

Sub Macro30Min()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next15Min < (Now - TimeSerial(0, 1, 0)) Then
        Next15Min = Now + TimeSerial(0, 14, 0)               '15
        Application.OnTime Next15Min, "Macro15Min"
    End If
    If Next60Min < (Now - TimeSerial(0, 5, 0)) Then
        Next60Min = Now + TimeSerial(0, 59, 0)               '60
        Application.OnTime Next60Min, "OneHourMacro"
    End If
'Reschedue myself:
    Next30Min = Now + TimeSerial(0, 30, 0)
    Debug.Print "Eseguo Macro30Min", Now, Next30Min         '30
    Application.OnTime Next30Min, "Macro30Min"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If

End Sub
Sub OneHourMacro()                                 'MACRO DI CONTROLLO
If StopAll = False Then
    If Next30Min < (Now - TimeSerial(0, 5, 0)) Then
        Next30Min = Now + TimeSerial(0, 30, 0)                   '30
        Application.OnTime Next30Min, "Macro30Min"
    End If
    If Next1Min < (Now - TimeSerial(0, 0, 30)) Then
        Next1Min = Now + TimeSerial(0, 1, 1)
        Application.OnTime Next1Min, "OneMinuteMacro"
    End If
'Reschedue myself:
    Next60Min = Now + TimeSerial(0, 59, 0)                       '60
    Debug.Print "Eseguo Macro60Min", Now, Next60Min
    Application.OnTime Next60Min, "OneHourMacro"
Else
'Stop all schedules:
    On Error Resume Next
        Application.OnTime Next1Min, "OneMinuteMacro", , False
        Application.OnTime Next15Min, "Macro15Min", , False
        Application.OnTime Next30Min, "Macro30Min", , False
        Application.OnTime Next60Min, "OneHourMacro", , False
    On Error GoTo 0
End If
End Sub

Ci sono due righe marcate <<< da esaminare e correggere

Anche il codice della Workbook_Open conteneva un errore; la macro completa:
Codice: Seleziona tutto
Private Sub Workbook_Open()
    Next1Min = Now + TimeSerial(0, 1, 2)
    Application.OnTime NextOneMin, "OneMinuteMacro"
    Next15Min = Now + TimeSerial(0, 14, 0)
    Application.OnTime Next15Min, "Macro15Min"
    Next30Min = Now + TimeSerial(0, 30, 0)
    Application.OnTime Next30Min, "Macro30Min"
    Next60Min = Now + TimeSerial(0, 59, 0)
    Application.OnTime Next60Min, "OneHourMacro"
End Sub


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

Prossimo

Torna a Applicazioni Office Windows


Topic correlati a "Invio dati da foglio excel a pagina web ad ogni modifica":


Chi c’è in linea

Visitano il forum: Nessuno e 5 ospiti

cron