1. Wykonaj formularz o rozmiarach wys.=245, szer.=300, składający się z elementów zaprezentowanych na rysunku obok (8 etykiet, 7 pól tekstowych, 1 listy kombinowanej, 1 ramki i 5 przycisków polecenia). Wszystkie napisy są wykonane czcionką Tahoma (12 pogrubione – tytuł, 10 pogrubione – przyciski polecenia, 10 zwykła – reszta). Przycisk polecenia „Pobierz dane” ma być nieaktywny.
2. Napisz procedurę startową, która załaduje formularz do pamięci, ustawi kursor w pierwszym polu tekstowym, pobierze z Arkusza1, z komórek A2:A7, nazwy związków do listy rozwijanej i wyświetli formularz.
3. Napisz procedurę obsługującą kliknięcie przycisku „Czyść” (czyści pola tekstowe, ustawia kursor w pierwszym polu tekstowym, nie czyści listy kombinowanej, ale powoduje, że pole edycji tej listy jest wyczyszczone, czyni przycisk polecenia „Pobierz dane” nieaktywnym).
4. Napisz procedurę obsługi zdarzenia związanego z kliknięciem przycisku „Zakończ”. Procedura powinna ukrywać formularz przed użytkownikiem i wyładować go z pamięci.
5. Po wybraniu związku z listy kombinowanej następuje aktywacja przycisku polecenia „Pobierz dane”.
Napisz procedurę związaną z kliknięciem przycisku „Pobierz dane”
6. Po kliknięciu tego przycisku polecenia, w arkuszu mają zostać odnalezione i wpisane do odpowiednich pól tekstowych wartości współczynników wielomianu (a, b, c i d) oraz wartość dH0[kJ/*mol*K)] odpowiadające wybranemu na liście kombinowanej związkowi. .
Napisz procedurę związaną z kliknięciem przycisku „dH [kJ/mol]”
7. Program służy do obliczania (wzory do obliczeń - obok) entalpii molowej w podanej temperaturze dla wybranego związku (wybieranego z listy rozwijanej). Kliknięcie przycisku „dH [kJ/mol]” powoduje, że obliczenia są wykonywane, a ich wynik jest wyświetlany w polu tekstowym obok przycisku.
Napisz procedurę związaną z kliknięciem przycisku „Do pliku”
8. Po kliknięciu tego przycisku polecenia nazwa związku i obliczone H kopiowane są do nowo tworzonego pliku tekstowego. Dane mają być rozdzielone średnikami.
Sub start()
Load UserForm1 'ładuje
UserForm1.TextBox1.SetFocus ' kursor
UserForm1.ComboBox1.RowSource = "A2:A7" ' wpisuje dane z arkusza do combo listu
UserForm1.Show 'pokazuje
End Sub
Option Explicit
Private Sub ComboBox1_Change()
If ComboBox1.ListIndex > -1 Then CommandButton1.Enabled = True 'to co odblokowuje jesli coś jest w liście
End Sub
Private Sub CommandButton1_Click() 'to co pobiera dane
Dim wiersz As Byte
While Cells(2 + wiersz, 1) <> "" ' jak cos jest w arkuszu nie puste to pobiera do listy
If Cells(2 + wiersz, 1) = ComboBox1.Value Then 'odpowiednie ciepło do związku
TextBox2 = Cells(2 + wiersz, 2)
TextBox3 = Cells(2 + wiersz, 3)
TextBox4 = Cells(2 + wiersz, 4)
TextBox5 = Cells(2 + wiersz, 5)
TextBox6 = Cells(2 + wiersz, 6)
Exit Sub 'żeby zakończyć mu pętle po 1 serii danych
End If
wiersz = wiersz + 1
Wend
MsgBox ("Nie znaleziono związku chemicznego, masz pecha") 'dla pustych wartości
End Sub
Private Sub CommandButton2_Click() ' do obliczeń dH
Dim a As Double, b As Double, n As Long, wynik As Double, eps As Double, wynik1 As Double
a = 298 ' temperatura standardowa
b = Val(TextBox1) 'temperatura nasza
n = 1000 'ilości podzialow dla eulera
eps = 0.000001 ' to jest ta dokładność
Do ' pętla licząca ta calkę
Call Euler(a, b, n, wynik)
n = 2 * n ' przelicza przedzialy do eurela
Call Euler(a, b, n, wynik1)
Loop Until Abs(wynik - wynik1) < eps
TextBox7 = Val(TextBox2) + wynik ' wyrzuca sumę już dla konkretnej temperatury (txt2-standard, i dodaje to co policzylo)
End Sub
Private Sub CommandButton3_Click() 'to jest to do pliku
Dim nazwa As String, wiersz As String
nazwa = Application.GetSaveAsFilename 'to okno zapisz jako i definiujemy nazwe
Open nazwa For Output As #1 'ten plik o naszej nazwie tylko do zapisu
wiersz = ComboBox1.Value & "; " & TextBox7 ' w wierszu zapisuje związek i wartosc entalpii ze srednikiem
Print #1, wiersz ' zapisz ten wiersz
Close #1 'zamknij ten plik sekwencyjny
End Sub
Private Sub CommandButton4_Click() 'czyszczenie
TextBox1 = ""
TextBox2 = ""
TextBox3 = ""
TextBox4 = ""
TextBox5 = ""
TextBox6 = ""
TextBox7 = ""
CommandButton1.Enabled = False
ComboBox1.ListIndex = -1 'żeby ten warunek listykombo był spelniony
TextBox1.SetFocus
End Sub
Private Sub CommandButton5_Click() 'zamykanie
UserForm1.Hide
Unload UserForm1
End Sub
Private Sub Euler(a As Double, b As Double, n As Long, wynik As Double) 'metoda Eulera
Dim dx As Double, licz As Long, su As Double
dx = (b - a) / n ' obliczamy szerokość podprzedziału
For licz = 1 To n - 1
su = su + f(a + dx * (licz - 1)) ' wyznaczamy sumę wartości funkcji w punktach podziału przedziału całkowania
Next
wynik = dx * (su + (f(a) + f(b)) / 2) ' obliczamy całkę oznaczoną, zgodnie ze wzorem
End Sub
Function f(x As Double) As Double 'funkcja do cp
f = Val(TextBox3) + Val(TextBox4) * x + Val(TextBox5) * x ^ 2 + Val(TextBox6) * x ^ 3
End Function