ripetere lo script ogni tot secondi

Anonimo
2013-11-29T17:56:01+00:00

Salve a tutti volevo sapere se qualcuno mi può per cortesia

aggiungere a questo script la funzione ripetizione in automatico ogni tot tempo(anche 5 secondi se è possibile)

Anche con l'integrazione a HTML .

Dim objFSO

    Dim objFolder

    Dim objFile

    Dim objExcel

    Dim objWorkbook

    Dim sNome

    Set objFSO = CreateObject("Scripting.FileSystemObject")

    Set objFolder = objFSO.GetFolder("C:\Users\Emanuele\Desktop\Dati")

    Set objExcel = CreateObject("Excel.Application")

    With objExcel

         .Visible = 0

         .DisplayAlerts = 0

    End With

    For Each objFile In objFolder.Files

        If LCase(Right(objFile.Name, 4)) = ".xls" Then

            sNome = Replace(objFile.Name, ".xls", "")

            Set objWorkbook = objExcel.Workbooks.Open(objFile.Path)

            objWorkbook.SaveAs "C:" & sNome & ".csv", 6

            objWorkbook.Saved = True

            objWorkbook.Close

            Set objWorkbook = Nothing

        End If

    Next

    objExcel.Quit

    Set objExcel = Nothing

    Set objFile = Nothing

    Set objFolder = Nothing

    Set objFSO = Nothing

Io purtroppo non so nulla o quasi di programmazione

grazie in anticipo 

un saluto Emanuele

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2013-12-05T06:04:28+00:00

Ciao Norman ,

il sistema funziona  l'unica cosa negativa è che mi crea i fogli

fastidioso perchè devo chiuderli a mano  sennò non si aggiorna.

Con un titolo l'ha fatto solo una volta

con piu di uno lo da di più.

 Se è fattibile senza tribulare ok sennò lascia stare .ù

 Io intanto ti ringrazio per la tua disponibilità

 e per la tua preparazione .

 Grazie.

 

 Emanuele

Ciao Emanuele,

Innanzitutto, non posso replicare questo comportamento indesiderato.

Comunque, non sono sicuro di aver capito: ulteriori fogli vuoti vengono inseriti nella cartella di lavoro con i nomi predefiniti sequenziali Foglio4, Foglio5 ecc?

===

Regards,

Norman

Ciao Emanuele,

Un altra domanda!

Che intervallo di tempo stai usando ed il comportamento sgradevole si manifesta anche con intervalli di tempo più lunghi?

===

Regards,

Norman

Ciao Emanuele,

In attesa di una risposta alle mie due domande di ieri, se la risposta alla domanda penultima dovesse essere affermativa, potresti provare il seguente workaround (accorgimento) eventuale:

Nel modulo ThisWorkbook, al di sotto della dichiarazione:

'=============>>

Option Explicit

incolla la seguente routine aggiuntiva:

'------------>>

Private Sub Workbook_NewSheet(ByVal SH As Object)

On Error Resume Next

With Application

.DisplayAlerts = False

.ScreenUpdating = False

SH.Delete

.DisplayAlerts = False

.ScreenUpdating = False

End With

End Sub

'------------>>

Nel modulo normale che avevi creato, dopo il codice esistente, incolla il seguente codice aggiuntivo:

'=============>>

Public Sub AddSheet()

Dim sStr As String

Dim aStr As String

Dim bStr As String

Dim dStr As String

Dim eStr As String

Dim Res As String

Const cStyle As Long = vbCritical

eStr = vbNewLine & "Non si è creato un nuovo foglio!"

aStr = "Inserisci un nome per il nuovo foglio"

bStr = "Non hai inserito un nome!" & eStr

dStr = "Hai cancellato il nome!" & eStr

sStr = "Errore!" _

& vbNewLine _

& "Un foglio di con questo nome esiste già!" _

& eStr

Res = Application.InputBox( _

Prompt:=aStr, _

Title:="Nuovo Foglio", _

Type:=2)

On Error Resume Next

Select Case Res

Case "False"

MsgBox Prompt:=dStr, Buttons:=cStyle

Case vbNullString

MsgBox Prompt:=bStr, Buttons:=cStyle

Case Else

If Not SheetExists(Res) Then

Call AddNewSheet(Res)

Else

MsgBox Prompt:=sStr, Buttons:=cStyle

End If

End Select

End Sub

'------------>>

Public Function AddNewSheet(sNome As String)

Dim WB As Workbook

Dim SH As Worksheet

Set WB = ThisWorkbook

'On Error Resume Next

Application.EnableEvents = False

With WB.Worksheets

Set SH = WB.Worksheets.Add    '(Before:=(.Count))

End With

Application.EnableEvents = True

SH.Name = sNome

'MsgBox Err.Number

End Function

'------------>>

Private Function SheetExists(ShName As String) As Boolean

Dim WB As Workbook

Dim SH As Worksheet

Set WB = ThisWorkbook

On Error Resume Next

Set SH = WB.Worksheets(ShName)

SheetExists = Not SH Is Nothing

Err.Clear

End Function

'<<=============

La procedura di evento,  Workbook_NewSheet, cancella immediatamente qualsiasi nuovo foglio che si crea in quella cartella di lavoro.

Ho anche aggiunto la routine AddSheet e due nuove funzioni per permettere che si aggiunga un nuovo foglio programmaticamente. Le nuove funzioni AddNewSheet e SheetExists sono utilizzate dalla routine AddSheet per verificarsi che il foglio di lavoro non esista già, di disattivare e poi riattivare la procedura di evento di cui sopra. La macro AddSheet raccoglie informazioni sul nuovo foglio di lavoro e passa le istruzioni per le due funzioni.

Come indicato in una risposta precedente, ti consiglio vivamente di provare sempre qualsiasi nuovo codice su una copia della cartella di lavoro interessata.

Inizialmente, vorrei suggerire che non  riduca il valore della costante cRunIntervalSeconds a meno di 10 secondi.

===

Regards,

Norman

La risposta è stata utile?

0 commenti Nessun commento

47 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2013-12-05T21:13:11+00:00

    ...

    Come sempre, bisogna perdonare il mio esecrabile italiano esecrabile!

    ===

    Regards,

    Norman

    Ciao Norman,

    ti ringrazio per la risposta, ma non era certo mia intenzione sollevare polemica o contestare la tua soluzione, riconosco che hai dovuto andare per tentativi vista la carenza di informazioni, mentre io sono intervenuto a posteriori.

    La storia dei volumi mancanti non è chiara nemmeno per me. So per certo che mancano tra i dati scaricabili, ma non riesco a capire come possano apparire in seguito, rimango comunque dell'idea, che vi sia una soluzione più diretta, ma senza informazioni specifiche di Emanuele ...

    Concludo dicendo che vorrei anch'io scrivere/parlare un esecrabile inglese al pari del tuo esecrabile italiano.

    Un saluto,

    Andrea.

    Ciao Andrea,

    Ti assicuro che quando ho inviato la mia ultima risposta a te, la polemica non era affatto in mente!

    Discutendo i vantaggi di un approccio in confronto con un altro, o anche come il risultato di un dibattito amichevole, si può arrivare invariabilmente ad una risoluzione migliore per l'OP. Inoltre, sono d'accordo con il nocciolo dei tuoi pensieri riguardanti i file csv.

    Lo scopo principale della mia risposta era di delineare il modo in cui è stato sviluppato il mio codice. Normalmente, non vorrei postare una risposta ad un OP a meno che non fossi fiducioso di essere in grado di fornire una soluzione efficiente. In questo caso, non sono riuscito ad aderire a questo principio, perché ho lasciato la mia curiosità trascinarmi : nella mia prima risposta a Emanuele, ho scritto

    "Devo confessare che sono più che un poco incuriosito e mistificato dalla tua richiesta."

    da quel momento ero irrecuperabilmente irretito!

    Nella mia prima risposta a te,  ti ho detto:

    "Macché! Il tuo aiuto è molto apprezzato!"

    Permettetemi di ripetere quel sentimento: più che apprezzato è un vero piacere!

    Saluti.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2013-12-05T18:20:34+00:00

    Concludo dicendo che vorrei anch'io scrivere/parlare un esecrabile inglese al pari del tuo esecrabile italiano.

    ROTFL!

    Ciao a tutti.

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2013-12-05T18:16:04+00:00

    Buonsera Norman

    Buonasera Andrea

    Ho letto le vostre considerazioni e capisco perfettamente la vostra ida di prendere alla fonte i dati .

    Devo però ripetere un concetto.

    1. MT4 ha un DDE

    2)Amibroker ha un DDE

    3)I dati arrivano in Amibroker col plugin Amibroker per mt4

      il discorso va bene per chi non usa i Volumi .

      DDE mt4 non rilascia volumi ecco il mio problema.

    Il discorso è  partito tutto da questo problema .

    SE poi dico ,se poi c'è un mezzo sempre diretto per ottenere anche i volumi come gli altri fields

    allora ben venga ma io non lo saprò mai .

    4)Riesco ad avere tutti 5 fields compreso volumi su foglio excell con  MT4 e librerie excellink.

    +EA apposito.

    Norman la tua modifica ha migliorato moltissimo l'ambaradam .

    Io ho ora quello che ti ho chiesto e ti ringrazio di nuovo


    Se poi tu vuoi fare 101 io non ti dico di no

    Se vuoi mi mandi una mail e ti mando la documentazione del Plugin mt4

    del DDE amibroker ecc ecc (in caso lasciami una mail per allegati).

    Ti ricordo che non sono entrato nel database Amibroker con dde Excell

    ma dopo la tua trasfomazione .csv raccolgo ed importo con Autofeed+FORMAT che hai visto.

    Non riesco ad entrare con DDe-excell .

    Detto questo ti auguro una buona serata.

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2013-12-05T18:04:55+00:00

    ...

    Come sempre, bisogna perdonare il mio esecrabile italiano esecrabile!

    ===

    Regards,

    Norman

    Ciao Norman,

    ti ringrazio per la risposta, ma non era certo mia intenzione sollevare polemica o contestare la tua soluzione, riconosco che hai dovuto andare per tentativi vista la carenza di informazioni, mentre io sono intervenuto a posteriori.

    La storia dei volumi mancanti non è chiara nemmeno per me. So per certo che mancano tra i dati scaricabili, ma non riesco a capire come possano apparire in seguito, rimango comunque dell'idea, che vi sia una soluzione più diretta, ma senza informazioni specifiche di Emanuele ...

    Concludo dicendo che vorrei anch'io scrivere/parlare un esecrabile inglese al pari del tuo esecrabile italiano.

    Un saluto,

    Andrea.

    La risposta è stata utile?

    0 commenti Nessun commento