Calcularea datelor

Calcularea datelor

Această carte vă va ajuta să stăpâniți mediul de dezvoltare integrat VBA și să învățați cum să programați în VBA folosind obiecte, proprietăți, metode și evenimente. Metodele de programare discutate sunt ilustrate prin exemple care pot fi testate imediat în practică. Puteți aplica aceste cunoștințe atât pentru crearea și îmbunătățirea aplicațiilor de birou populare, inclusiv pentru aplicațiile Office XP, cât și pentru crearea propriilor aplicații.







Cartea este concepută pentru cei care vor să învețe rapid și fără prea mult efort să învețe cum să programeze pentru Windows utilizând VBA.

Carte: VBA pentru Dummies

Calcularea datelor

După cum știți, timpul este un termen relativ. Prin urmare, principalul lucru este de a obține data și ora într-un mod care să le compare cu alte date și ore. Uneori trebuie să știți cât de departe este o dată de la altul sau de la un alt moment. Și uneori este necesar să știm data care va fi, de exemplu, doi ani și trei luni. Mai multe funcții oferite în VBA pentru prelucrarea datei și a valorilor de timp transformă calculele cu date într-o chestiune foarte simplă.

Utilizați funcția DateAdd atunci când trebuie să aflați ce dată va veni în trei ani sau ce a fost în ceas cu o oră și cincisprezece minute în urmă. Astfel de calcule pot fi efectuate fără un computer, la toate, dar au nevoie de îngrijire specială, deoarece valorile de funcționare ale componentelor de date și ore care nu sunt supuse regulilor obișnuite ale numerelor aritmetice zecimale (zilele săptămânii - 7 secunde - 60, etc), și ei înșiși componentele sunt tipărite foarte mult.

Funcția DateAdd are următoarea sintaxă: DateAdd (interval, număr, start_date).

Valoarea returnată de funcție este egală cu valoarea obținută ca urmare a adăugării unui număr specificat de intervale la data de începere (sau la ora de începere). Dacă doriți o diferență, nu o sumă, specificați o valoare negativă pentru argument. În tabel. 11.5 afișează un set de coduri de caractere valabile pentru intervalul de argumentare (atunci când utilizați nu uitați să introduceți codul corespunzător în ghilimele).

Tabelul 11.5. Valorile argumentelor funcțiilor DateAdd și DatDiff

De exemplu, ca urmare a unui operator

dat Was = DataAdd ("s", -90, acum)

datele variabile ar conține o valoare corespunzătoare duratei care era cu 90 de secunde în urmă față de ora curentă. Dacă doriți să afișați numai porțiunea din valoarea de pe ecran, care se referă la timpul, folosiți funcția de formatare cu un format de argument de timp corespunzător (de exemplu, Format (datBylo, „timpul mediu“)), așa cum este descris în secțiunea „Formatarea dannk“.

Folosind funcția DateAdd, puteți adăuga sau scădea un număr de aceleași tipuri de intervale, dar, de exemplu, pentru a afla data care a fost acum doi ani și trei luni, nimic nu împiedică utilizarea acestei funcții de două ori.

Ca alternativă, VBA oferă alte două funcții pentru datele și orele care vă permit să amestecați intervalele - Date Serial și TimeSerial. Fiecare dintre aceste funcții are trei argumente;

DataSerial (an, lună, zi)

TimeSerial (ore, minute, secunde)

Toate argumentele în acest caz sunt obligatorii și trebuie să fie expresii care dau valori întregi (și nu valori de tip Date). Uite, puteți spune ce va fi obținut ca rezultat al executării următoarei coduri și să acordați atenție calculelor din al treilea argument:

dat Al treilea an = DataSerial (intYear, intMonth, intDen + 1)

Și, bineînțeles, oricare dintre aceste argumente sau chiar toate pot fi doar numere.

Utilizați funcția DateDiff pentru a afla câte intervale de timp specifice (ani, luni, săptămâni etc.) sunt plasate între două date sau ore specificate. De exemplu:

lng Câte = DateDiff ("m", # 2/12/90 #, # 10/12/01 #)

Ca urmare a acestei declarații, variabila lngSmall - o variabilă de tip Long - va conține numărul de luni scoase între cele două date specificate. Pentru primul argument, funcția DateDiff necesită un cod de interval de timp, iar în acest caz "m" raportează funcțiile care trebuie măsurate în luni, nu ani, săptămâni sau alte unități.

Următoarea procedură de tip Function utilizează funcțiile DateDiff și DateSerial pentru a calcula vârsta persoanei în ani. Pentru a evita erorile în executarea programului se poate adăuga la codul verifică tipul de date al valorii, care va primi un argument care specifică data nașterii (folosiți funcția IsDate), precum și verificarea că data primită de naștere nu este în viitor.







Funcția WhatAge (dateDateObestul ca dată)

Dim intAge As Integer ', setați Long pentru a permite vârsta> 255 intAge = DateDiff ("yyyy", DateDateOfBirth, Date)

"Se verifică dacă ziua de naștere a acestui an a fost sau nu a fost:

Dacă DataSerial (Anul (Data), Luna (DataDateOfBirth), _

Zi (DataDată de naștere))> Data apoi

intAge = intAge - 1

DIRECTIVEI Deoarece, ca să spunem așa, un stil de viata parazitare pe aplicatii mari, programe VBA de multe ori nu necesită nici un element de interfață cu utilizatorul (casete de dialog, meniuri, etc.) - Când executați VBA-program pot fi executate pe baza documentului de aplicare curent conform acestora acțiuni cu conținutul acestui document.

În mod evident, este adevărat că există multe situații în care este necesară interacțiunea directă cu utilizatorul final al programului VBA. Posibilități excelente de a crea ferestre interactive în cadrul programului oferă instrumente pentru crearea formularelor personalizate VBA (așa cum am discutat în capitolul 10), dar dacă există o oportunitate de a face cu mijloace mai simple, atunci cu atât mai simplu, cu atât mai bine.

Două funcții VBA, MsgBox și Input Box oferă o bună capacitate de bază pentru trimiterea mesajelor către utilizator și obținerea răspunsurilor de la acesta.

* Funcția MsgBox afișează o fereastră cu un mesaj, dar nu numai - vă permite să determinați care dintre cele două (sau mai multe) butoane pe care le-a făcut clic pe utilizator pentru a închide fereastra.

* Funcția Input Box afișează o fereastră cu un mesaj și un câmp în care utilizatorul poate tipări un răspuns.

Formal, structura sintactică a funcției MsgBox arată astfel:

MsgBox (mesaj [, butoane] [, antet] [, fișier de ajutor, secțiune])

Pe măsură ce se afișează parantezele, singurul argument necesar este un mesaj, care specifică în mod clar mesajul pe care doriți să-l afișați pe ecran.

În forma sa cea mai simplă, funcția MsgBox acționează ca operator. Trebuie doar să o imprimați pe o linie separată și să adăugați mesajul pe care doriți să îl afișați. De exemplu:

MsgBox "Acesta este un test al muncii lui MsgBox."

Ca urmare a acestei linii, VBA va afișa o fereastră cu un mesaj similar cu cel prezentat în Fig. 11,2 (exemplul A).

Fig. 11.2. Trei ferestre simple de mesaje

Textul mesajului poate fi închis în paranteze, dar parantezele sunt opționale atunci când funcția este utilizată ca operator.

Un mesaj poate fi, de asemenea, o variabilă sau o expresie. Ca de obicei, VBA convertește automat valorile numerice și datele în caractere afișate pentru tine. De exemplu, următorul fragment de cod este pe deplin funcțional, iar rezultatul este prezentat în Fig. 11,2 (Exemplul B):

datWhen = Format (Acum, "Data scurtă")

strInfo2 = "stânga dorințelor:"

MsgBox strlInfol datWhen strInf o2 intWishCount

Pentru a afișa un mesaj în mai multe rânduri, adăugați caractere noi în mesaj (codul lor ASCII este 13) utilizând funcția Chr (exemplul B din Figura 11.2).

MsgBox "Aceasta este prima linie." Chr (13) "Aceasta este a doua linie."

Puteți împărți textul unui mesaj cu mai multe linii și coloane utilizând filele (codul lor ASCII este 9).

Pe lângă mesaj, în fereastra de mesaje poate apărea una dintre mai multe pictograme standard, precum și mai multe butoane de tip standard. Toate acestea sunt specificate prin specificarea unei singure valori numerice pentru argumentul opțional al butonului.

Cu pictograma, fereastra de mesaje va arăta puțin "mai abruptă" decât ferestrele simple din Fig. 11.2. Cel prezentat în Fig. 11.3 Caseta de mesaje conține o pictogramă a situației critice (această pictogramă determină, de obicei, o anumită entuziasm a utilizatorului).

Fig. 113. Fereastră de mesaje neplăcute

În mod prestabilit, fereastra mesajului are doar butonul OK, dar puteți adăuga și butoane cu opțiunile Anulare, Da, Nu, Oprire, Repetare și Sărire în diferite combinații. În Fig. 11.3 afișează o fereastră cu una dintre aceste combinații de butoane.

Ca și în cazul multor alte funcții, valoarea argumentului pentru buton este calculată ca suma constantelor reprezentând seturile de butoane și pictogramele. Puteți calcula valoarea dorită manual, dar este mai bine să creați o expresie adecvată din constantele VBA numite care sunt oferite doar pentru aceste scopuri. În tabel. 11.6 aceste constante sunt date împreună cu valorile lor numerice și descrierile alocării.

Tabelul 11.6. Constante VBA pentru ferestre de mesaje și ferestre de intrare

Utilizând acest tabel, este ușor să calculați că atunci când apelați o funcție care afișează caseta de mesaje prezentată în Fig. 11.3, valoarea argumentului butonului a fost 531. Dar cine vrea să contorizeze această valoare? Este mai ușor să tastați următoarea declarație:

intA = MsgBox ("Faceți clic pe butonul", vbYesNoCancel + vbCritical

+ Butonul vbDefault3, "VBA pentru Dummies")

O treime din constantele utilizate în expresia pentru butoane argument, vbDefaultButton3 constant numește al treilea buton (de la stânga la dreapta) Butonul este selectată implicit. În acest caz, acesta este butonul Anulare. Dacă luați în considerare cu atenție orezul. 11.3, puteți vedea că butonul Anulare a primit focalizare de intrare - inscripția pe acesta este conturată cu un cadru punctat și acest lucru înseamnă că acest buton va fi activat dacă apăsați bara de spațiu sau .

Sensul afișării butoanelor în fereastra mesajului este acela de a oferi utilizatorului posibilitatea de a alege acțiunea. În acest caz, utilizatorul nu are nevoie să imprime nimic - trebuie doar să faceți clic pe unul dintre butoane. Și trebuie să fii capabil să dai seama pe care buton a făcut clic pe utilizator.

Acest lucru este simplu, deoarece funcția MsgBox returnează o valoare întregă care corespunde exact butonului pe care utilizatorul a dat clic. Pentru a nu încărca memoria, puteți compara valoarea returnată nu cu numerele specifice, ci cu constantele propuse VBA numite. Aceste constante sunt împreună cu valorile lor reale.

Dacă există doar două butoane în fereastra mesajului, pentru a afla ce buton a fost apăsat, instrucțiunea Dacă este bine. Apoi. De exemplu:

Dacă MsgBox ("Începe?", VbYesNo) = vbYes Apoi

Când există mai multe butoane, trebuie să utilizați instrucțiunea Dacă. Apoi. Altfel Dacă.

În mod implicit, fereastra de mesaje afișează în bara de titlu numele aplicației VBA din care rulează programul (a se vedea Figura 11.2). Puteți modifica acest antet în orice alt antet prin specificarea valorii corespunzătoare a argumentului antetului în instrucțiunea de apel MsgBox (a se vedea Figura 11.3).







Articole similare

Trimiteți-le prietenilor: