Inregistrarea unei valori in functie de ora (formula)

gxg276
Mesaje: 20
Membru din: Joi Ian 28, 2010 11:20 am

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gxg276 » Vin Ian 29, 2010 1:30 pm

Nu mai pot folosi nici un fisier excel sau nu mai pot folosi fisierul cote ? Fiindaca, in timp de Copiere_timer_1 functiona, am putut deschide si ediat fisierul pe care l-am pus in atasament.

Marea problema, in situatia actuala, ar fi ca nu pot lua doar valorile doar la anumite intervale de timp, in stransa legatura cu ora de incepere a evenimentului (in atasament aveti o foaie cu produsul la care as vrea sa ajung).
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

gxg276
Mesaje: 20
Membru din: Joi Ian 28, 2010 11:20 am

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gxg276 » Vin Ian 29, 2010 1:58 pm

Va puteti uita, va rog, si pe urmatorul atasament ?
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gecs » Vin Ian 29, 2010 2:09 pm

Da, nu cred ca poti accesa fisierul "cote.xls" pentru ca e accesat foarte des de macro-ul din fisierul care face copierea - alte fisiere poti deschide, edita, salva etc.

Se poate face ca fisierul care salveaza sa copieze valorile respective la un interval de 60 de secunde. Daca-l pornesti cu cca. 3 ore inainte de ora evenimentului si in fisier, inainte de a apasa pe buton, scrii pe oricare coloana (exceptand coloanele unde se copiaza informatiile) datele de recunoastere ale evenimentului - eventual prin copiere din fisierul "cote.xlsx" si la sfarsitul executiei dai un Save As, datele inregistrate se pot prelucra apoi cu formule, ca sa scoti range-ul necesar graficului. Se poate ca procedura de copiere a datelor sa poata fi oprita la ce ora doresti, fie din buton, fie printr-o inscriere a orei de oprire intr-o celula si atunci n-ar mai fi nevoie de apasarea pe buton. Ideea e de a pastra fisierul asta ("Copiere_Timer_1.xlsm", sau cum i-om zice in final) ca pe un sablon, adica sa nu-l salvezi niciodata cu datele in el, ci sa dai Save As.

Ti-am trimis si un PM.

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gecs » Vin Ian 29, 2010 2:14 pm

gxg276 scrie:Va puteti uita, va rog, si pe urmatorul atasament ?
Se poate ce vrei, doar sa stabilim de unde incep datele care se copiaza (coloana si rand).

gxg276
Mesaje: 20
Membru din: Joi Ian 28, 2010 11:20 am

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gxg276 » Vin Ian 29, 2010 2:18 pm

gecs scrie:
gxg276 scrie:Va puteti uita, va rog, si pe urmatorul atasament ?
Se poate ce vrei, doar sa stabilim de unde incep datele care se copiaza (coloana si rand).
Voi face un template tinand cont de stadiul in care am ajuns pana acum si il voi trimite.
Aveti un mail de la mine.
O zi buna !

Avatar utilizator
gecs
Moderator
Moderator
Mesaje: 2311
Membru din: Sâm Aug 15, 2009 10:05 am
Localitate: Bucuresti

Re: Inregistrarea unei valori in functie de ora (formula)

Mesaj de gecs » Mar Feb 02, 2010 2:43 pm

...
Si dialogul a continuat prin mesaje pe e-mail, pentru ca nu era cazul sa aglomeram formul cu o discutie de tip "messenger"...

Rezultatul a fost un fisier care copiaza valorile necesare din fisierul conectat la net pentru a realiza un istoric al valorilor urmarite si in final un grafic al acestor valori (graficul lipseste din fisierul atasat).

Arhiva atasata contine doua fisiere: "OnTime_Run.xlsm" si "test.xlsx", deci este vorba de fisiere de Excel 2007. Fisierul OnTime_Run.xlsm" e cel care copiaza datele din alt fisier la intervale de timp prestabilite. Fisierul "test.xlsx" contine date care ar putea fi relevante pentru problema in cauza - urmarirea cotelor pariurilor si a sumei totale pariate in timp si se presupune a contine o conexiune la internet cu timp de refresh prestabilit.

In afara de procedurile legate de interfata (selectarea numelui fisierului de urmarit, a foii de calcul, indicarea celulelor a caror valoare se copiaza si se urmareste la intervalele prestabilite de timp), functionarea fisierului se bazeaza pe doua proceduri:

Cod: Selectaţi tot

Sub Do_on_Time(ByVal a As Integer)
    Application.OnTime a_ev(a), "Scrie_Date"
End Sub
si

Cod: Selectaţi tot

Sub Scrie_Date()
    If Len(matched) > 0 Then
        ThisWorkbook.Worksheets("Sheet1").Range("C" & Trim(Str(7 + ev_no))).Value = Application.Workbooks(fisier).Worksheets(foaie).Range(matched).Value
    End If
    If Len(pron_1) > 0 Then
        ThisWorkbook.Worksheets("Sheet1").Range("E" & Trim(Str(7 + ev_no))).Value = Application.Workbooks(fisier).Worksheets(foaie).Range(pron_1).Value
    End If
    If Len(pron_x) > 0 Then
        ThisWorkbook.Worksheets("Sheet1").Range("F" & Trim(Str(7 + ev_no))).Value = Application.Workbooks(fisier).Worksheets(foaie).Range(pron_x).Value
    End If
    If Len(pron_2) > 0 Then
        ThisWorkbook.Worksheets("Sheet1").Range("G" & Trim(Str(7 + ev_no))).Value = Application.Workbooks(fisier).Worksheets(foaie).Range(pron_2).Value
    End If
    ev_no = ev_no + 1
    If ev_no > no_ev Then
        ThisWorkbook.Worksheets("Sheet1").CommandButton2.Caption = "Start"
        ThisWorkbook.Worksheets("Sheet1").CommandButton2.Enabled = False
        ThisWorkbook.Worksheets("Sheet1").CommandButton1.Enabled = True
        ThisWorkbook.Worksheets("Sheet1").CommandButton3.Enabled = True
        Exit Sub
    Else
        Call Do_on_Time(ev_no)
    End If
End Sub
In array-ul "a_ev" sunt salvate valorile inscrise in range-ul A8:A57 din Sheet1 din fisierul "OnTime_Run.xlsm", care reprezinta diferenta dintre ora evenimentului si ora la care se face citirea (copierea) valorilor urmarite. Variabilele "no_ev" si "ev_no" reprezinta numarul evenimentelor (timpilor din "a_ev"), respectiv numarul evenimentului curent.

Metoda "OnTime" folosita presupune indicarea orei la care se declanseaza metoda si a numelui procedurii care se executa la ora respectiva. IF-urile din procedura "Scrie_Date" testeaza daca in variabilele "matched", "pron_1", "pron_x" si "pron_2" e inscrisa adresa vreunei celule de urmarit din fisierul selectat ("fisier"), foaia de calcul selecatata ("foaie") si numai daca aceste variabile contin o valoare se inscrie in Sheet1 din "OnTime_Run.xlsm", pe randul determinat in functie de valoarea curenta stocata in "ev_no", valoarea urmarita din fisierul "fisier", foaia "foaie", celula a carei adresa e stocata in variabila respectiva.

Ultimul IF din procedura "Scrie_Date" testeaza daca s-au terminat evenimentele stocate in "a_ev" si daca nu, apeleaza din nou "Do_on_Time" pentru urmatorul eveniment, daca da, semnaleaza terminarea urmaririi prin modificarea interfetei.

Fisierul OnTime_Run.xlsm" poate fi folosit, cu adaptarile de rigoare, pentru urmarirea si crearea istoricului unor valori din orice alte fisiere care contin conexiuni cu refresh la un anume interval de timp.
Nu aveţi permisiunea de a vizualiza fişierele ataşate acestui mesaj.

Închis

Înapoi la “Visual Basic for Application (VBA) cu Excel - Intrebari tehnice”