Novità

x esperti excel

L

LuigiB

Guest
ciao Joe .. posto a beneficio di chi usa quel file lo script da lanciare in spaziometria
per fare l'aggiornamento

Codice:
Option Explicit
Sub Main
    Dim xlApp ' oggetto excel
    Dim xlBook ' insieme di cartelle di lavoro
    Dim xlSheet ' foglio di lavoro
    Dim sFileXls
    Dim sLastData
    Dim idEstr ,k  , r ,nLastRiga , nAggiornate
    Dim aNum

    sFileXls = ScegliFile("",".xls")
    If FileEsistente(sFileXls) Then
        If OpenExcelFile(xlApp,xlBook,xlSheet,sFileXls)Then
            sLastData = GetUltimaDataIns(xlSheet , nLastRiga)
            If IsDate(sLastData) Then
                idEstr =  DataEstrToIdEstr( Day(sLastData ), Month(sLastData) ,Year(sLastData))
                If idEstr <> 0 Then
                    For k = idEstr+1 To EstrazioniArchivio
                        nLastRiga = nLastRiga +1

                        Messaggio DataEstrazione(k)
                        DoEventsEx
                        If ScriptInterrotto  Then Exit For
                        xlSheet.cells(nLastRiga , 1) = IndiceAnnuale(k) & "-" & DataEstrazione( k ,,,"/")
                        For r = 1 To 11
                            If r = 11 Then
                                Call GetArrayNumeriRuota (k ,12,aNum)
                            Else
                                Call GetArrayNumeriRuota (k ,r,aNum)

                            End If
                            xlSheet.cells(nLastRiga , r + 1) = FormattaNumeri (aNum)
                        Next
                        nAggiornate = nAggiornate +1

                    Next
                    If nAggiornate  > 0 Then
                        MsgBox "Aggiornate " & nAggiornate & "estrazioni." & vbCrLf & "Chudere il file excel salvando le modifiche e riaprirlo"
                    End If
                Else
                    MsgBox "Con la data " & sLastData & " non è stata trovata l'estrazione nell'archivio del programma"        
                End If
            Else
                MsgBox sLastData & " data non riconosciuta"
            End If
        Else
            MsgBox "Errore apertura foglio excel",vbCritical
        End If



        xlApp.visible = True
        ' da fare alla fine della scrittura del foglio per liberare risorse
        'xlSheet.save
        'xlBook.Close
        Set xlSheet = Nothing
        Set xlBook = Nothing
        Set xlApp = Nothing
    End If
End Sub
Function OpenExcelFile(xlApp,xlBook,xlSheet,sFile)
    On Error Resume Next
    Set xlApp = CreateObject("Excel.Application")
    xlApp.Workbooks.Open(sFile)
    Set xlBook = xlApp.Workbooks(1)
    Set xlSheet = xlBook.Sheets("Estrazioni")
    If Err = 0 Then
        OpenExcelFile = True
    End If

End Function

Function GetUltimaDataIns(xlSheet ,nLastRiga)
    Dim k , j
    Dim sData  

    nLastRiga =0
    Messaggio ("Cerca ultima data ..")

    k  = 3
    Do While xlSheet.cells( k ,1) <> ""
        k = k + 20
    Loop
    For j = k To 3 Step -1
        If xlSheet.cells( j ,1)<> "" Then
            sData = xlSheet.cells( j ,1)
            nLastRiga = j
            Exit For
        End If
    Next

    If sData <> "" Then
        Dim aV
        aV = Split (sData , "-")
        GetUltimaDataIns = Trim(aV(1))
    Else
        GetUltimaDataIns = ""
    End If
End Function

Function FormattaNumeri (aNum)
    Dim k
    Dim sRet

    sRet = ""
    For k = 1 To 5
        sRet = sRet & FormatSpace(aNum(k) ,2,True ) & " "
    Next

    FormattaNumeri = Trim(sRet)
End Function
 

giuseppe56

Advanced Member
Buongiorno,
Signor LuigiB farle i complimenti e poco.
La ringrazio per la Sua Pazienza,
Lo script funziona alla perfezione.
Le auguro tante soddisfazioni nel suo Lavoro.
Felice giornata
Saluti giuseppe56
 

vincenzo4221

Advanced Member >PLATINUM<
Grazie Luigi per l'aiuto, volevo chiederti (se è facile) , quali sono le istruzioni da modificare per aggiornare , magari altri programmini excel ?
 

joe

Advanced Member >PLATINUM PLUS<
Grazie Luigi.

C'è sempre molto da imparare e qualcosa di utile.

Trovo strano anche quanto scrive Vincenzo.

Lo script si comporta come "un ripetitore" (di aggiornamento)

cioè "riceve" l'aggiornamento presente in Spaziometria e lo "trasmette",

ad un foglio generico di excel scelto attraverso un input.

Cioè un foglio generico qualsiasi.

E' evidente che questa genericità ...

essendo orientata ad aggiornare un programma specifico,è obbligatoriamente specifica.

Specifica nel suo formato ... ma generica nel suo complesso.

Quindi avendo un foglio di nome "Pippo" ... che aveva ... "un archivio", (di alcune estrazioni) ...

... s'è "aggiornato", ai dati più recenti ... con lo scirpt di Luigi.

:)

[IMG2=JSON]{"data-align":"none","data-size":"full","src":"http:\/\/i68.tinypic.com\/o8fc0m.jpg"}[/IMG2]
 
Ultima modifica:
L

LuigiB

Guest
Ciao Joe e esattamente così. Per questo non avevo ancora risposto. Grazie alla dimestichezza e alla intuito ti è stato facile capire come funziona lo script ..piccole differenze si potrebbero avere se il foglio target invece di avere 5 numeri a cella ne avesse uno per cella ma niente di insormontabile la logica e identica...ciao...
 

Amedeo1972

Member
Ciao a tutti volevo chiedere ma su sistemi a 64 bit va in errore oppure e' solo un mio problema? Grazie a chiunque voglia rispondermi, ciao.
 

joe

Advanced Member >PLATINUM PLUS<
Ciao Amedeo,

più che dal numero di bit penso possa dipendere dalla versione di Excel,

ovvero ad una incompatibilità tra le molte versioni di esso.

Ma, più nello specifico e con più probabilità, "i dati" potrebbero essere "protetti"

o quando sono consisderati indirzzati ad un file protetto, o come detto prima, sono in formato sbagliato.

Oppure ancora, quando nel tentativo di scrittura vanno ad interessare aree protette dal sistema operativo.

Per esempio nel mio computer il disco C: (e per convenzione il disco rigido) sarebbe protetto.

:)
 
Ultima modifica:

vincenzo4221

Advanced Member >PLATINUM<
OK , quindi , per i meno esperti come me, sarebbe opportuno avere anche uno script che aggiorni un generico foglio excel, ma con un archivio di differente impostazione , cioè , con un numero per ogni cella, si può? in questo modo aggiorniamo tutti i fogli excel che abbiamo e non solo quelli con i 5 numeri per cella.ciao
 
Ultima modifica:

joe

Advanced Member >PLATINUM PLUS<
Ciao Vincenzo.

Premesso che Excel non ha bisogno di Spaziometria,

per caricare dati dal web (ed è anche semplice farlo) ...

... il resto della domanda indirizza ad una risposta, secondo me non convniente.

Perchè pare, che "la cosa" sia presa per il verso contrario.

Mi spiego:

E' meglio ... e più precisamente ... OCCORRE PRIMA DI TUTTO

conoscere il formato dei dati e la struttura dell' archivio locale che si intende aggiornare.

POI ... adattare i dati dell'archivio remoto ... al formato locale.

Se si può.

Infatti alcuni archivi potrebbero essere molto "complicati"

e contenenti anche altri dati, oltre le date e gli estratti.

Oppure valori criptati. O indici esterni.

Da quanto scrivi, sembra ci sia un campo data,

(anche se non è dichiarato e non si sa quale formato esso abbia)

Non si sa se ci sia un numero progressivo per ogni estrazione.

e poi pare ci siano 55 celle una per ogni estratto.

Forse, in ogni riga, una estrazione.

Ma senza che sia noto "il formato" dei dati è improbabile

... azzeccare una soluzione valida ... procedendo per tentativi ed ipotesi.

Senza dimenticare che una minima "differenza" renderebbe probabilmente inutile,

e quasi certamente dannoso tutto il lavoro fatto.

:)
 

joe

Advanced Member >PLATINUM PLUS<
Ok,

ma le macro del foglio sono protette da password,

pertanto non è possibile vedere cosa faceva l'aggiornamento.

Ho visto invece che il numero di estrazioni ed altre cose sono calcolate e non fanno parte dell'archivio.

Avere gli estratti nello stesso formato è possibile,

ma sarebbe meglio poter lavorare direttamente su questi fogli.

L'autore non è in grado di fare le modifiche necessarie ?

:)
 

joe

Advanced Member >PLATINUM PLUS<
Ciao Vincenzo.

Nel foglio "Fascia" in alto a sinistra c'è scritto "victor13"

Comunque sia lo "sbloccare il foglio" era per poter organizzare una soluzione migliore.


... ... ...


Dicevo ... sembra si possano incollare i dati di aggiornamento, nella pagina archivio.

Quindi ho semplicemente modificato uno script presente tra gli esempi.

Esso crea un "facsimile" del foglio Archivio, con i dati di aggiornamento.

(SE DISPONIBILI IN SPAZIOMETRIA)

Occorre:

DAL nuovo FOGLIO (Cartel1) che si è creato ...

* Selezionare e copiare SOLO le linee necessarie all'aggiornamento.

NEL FOGLIO "Fasce Ritardo 1.3"

* Posizionarsi sulla prima cella vuota a sinistra in fondo del foglio ARCHIVIO.

* Cliccare su di essa co il tasto DESTRO del mouse.

Dal menù contestuale che si apre ...

* Scegliere "Incolla Valori"

*** ATTENZIONE : NON HO CONTROLLATO NULLA ***

:) Buona giornata a tutte/i.


Codice:
Option Explicit
Sub Main
' questo esempio esporta in excel il range di estrazioni selezionato
Dim xlApp ' oggetto excel
Dim idEstr,r,e,i,riga
Dim Inizio,Fine,nEstrTot
Dim nColor
Dim sCoord
Inizio = 9329
Fine = EstrazioneFin
nEstrTot =(Fine + 1) - Inizio
If XlsApriFile(xlApp) Then ' istanzia excel
Call ScriviIntestazioneColonne ' scrive le intestazioni delle colonne
' ciclo per alimentare il foglio
riga = 1
For idEstr = Inizio To Fine ' cicla sulle estrazioni
riga = riga + 1 ' incrementa la riga dove andra a scrivere
i = 1
nColor = vbWhite ' preimposta il colore della colonna
Call XlsScriviC(riga,i,riga + 5784)
i = i + 1
Call XlsScriviC(riga,i,"")
' scrive la prima colonna con la data
i = i + 1
Call XlsScriviC(riga,i,DataEstrazione(idEstr,,,"/"))
' cicla sulle ruote dell'estrazione
For r = 1 To 12
If r <> 11 Then
For e = 1 To 5
i = i + 1
sCoord = XlsGetLetteraFromColonna(i) & riga ' calcola la coordnata della cella dove scrivere
Call XlsScrivi(sCoord,Estratto(idEstr,r,e))
Next
End If
Next
Call AvanzamentoElab(Inizio,Fine,idEstr)
If ScriptInterrotto Then Exit For
Next
Call XlsAutoFit("A1:" & XlsGetLetteraFromColonna(56) & nEstrTot) ' esegue la funzione di adattamento delle colonne
Call XlsMostra ' mostra excel all'utente
End If
End Sub
Sub ScriviIntestazioneColonne
' scrive l'intestazione delle colonne nel foglio
Dim r,e,i
Dim nPrimaCol,nUltimaCol,sCoordC1,sCoordC2
sCoordC1 = "A1"
Call XlsScrivi(sCoordC1,"Num",,,True)
sCoordC1 = "C1"
Call XlsScrivi(sCoordC1,"Data",,,True)
nPrimaCol = 3
For r = 1 To 12
If r <> 11 Then
nPrimaCol = nPrimaCol + 1
nUltimaCol =(nPrimaCol - 1) + 5
sCoordC1 = XlsGetLetteraFromColonna(nPrimaCol) & "1" ' calcola le coordinate delle cellle relative alla ruota
sCoordC2 = XlsGetLetteraFromColonna(nUltimaCol) & "1"
Call XlsScrivi(sCoordC1,NomeRuota(r),,,True,,,,xlsCenter)
Call XlsMerge(sCoordC1,sCoordC2,True) ' unisce le 5 celle contigue della ruota
Call XlsFormatoCella(sCoordC1 & ":" & sCoordC2,,,,,,xlsCenter) ' imposta l'allineamento
nPrimaCol = nUltimaCol
End If
Next
End Sub
 
Ultima modifica:

Ultima estrazione Lotto

  • Estrazione del lotto
    giovedì 18 aprile 2024
    Bari
    13
    39
    14
    70
    78
    Cagliari
    67
    65
    03
    87
    63
    Firenze
    85
    90
    19
    67
    78
    Genova
    60
    81
    39
    33
    13
    Milano
    90
    01
    83
    11
    88
    Napoli
    18
    12
    80
    29
    19
    Palermo
    50
    83
    40
    24
    12
    Roma
    74
    48
    75
    65
    37
    Torino
    80
    46
    44
    27
    30
    Venezia
    70
    16
    72
    03
    89
    Nazionale
    89
    22
    06
    87
    13
    Estrazione Simbolotto
    Genova
    28
    21
    43
    25
    17
Alto