napisał: wujek88 postów: 13
umieszczony: 25 lutego 2011 18:27
|
|
dziękuje bardzo za wszelkie wskazówki, program został ukończony, ale ciągle będą dodawane nowe funkcję, więc na pewno jeszcze nie raz odwiedzę to forum:) |
|
napisał: Trebor postów: 1209
umieszczony: 21 stycznia 2011 23:03
|
|
W chwili gdy ostatniw przyjmuje wartość 0 wyrażenie Cells(ostatniw, 1) zwraca błąd, gdyż nie ma wiersza 0.
Co do wykresu, to błąd formuły powstaje w chwili wykasowania danych w arkuszu podsumowanie. Można temu zapobiegać w formule, ale czy taka sytuacja będzie miała miejsce?
Formuła znajduje się w Formuły- Menedżer nazw, a Pok1 to po prostu nazwa. |
|
napisał: wujek88 postów: 13
umieszczony: 21 stycznia 2011 21:41
|
|
Cytat:Czy ten komunikat dotyczy skoroszytu, który wysłałem (niezmienianego)? Jeśli to coś innego to potrzebuję więcej szczegółów, a najlepiej przykładowy skoroszyt.
Kolejny nr z kolumny A uzyskasz np w ten sposób:
MsgBox Application.WorksheetFunction.Max(Sheets("Arkusz1").Columns(1)) + 1
tak, ale jak nadać numer kolejnemu wierszowi (wciskam przycisk i wstawia się do pierwszej kolumny kolejny numer wiersza aby móc wypełnić dane), napisałem takie coś
Sub dodaj_wiersz()
Dim ostatniw As Integer
Dim numeracja As Integer
ostatniw = 0
Worksheets("dane_tyg").Activate
Do While Sheets("dane_tyg").Cells(ostatniw, 1).Value <> ""
ostatniw = ostatniw + 1
Loop
MsgBox ostatniw
Sheets("dane_tyg").Cells(ostatniw, 1).Value = ostatniw
End Sub
ale nie działa;/
z tym wykresem jest błąd w tym pliku, który wysłałeś, ogólnie to nie wiem jak tam jest deklarowany zmienny zakres, który ma być wzięty pod uwagę przy tworzeniu wykresu
w przesłanym pliku jest tak:
Cytat:
nazwa serii=podsumowanie!W1K3
wartość serii=Prg_Analiza_forum.xls!POK1
na czym polega ten sposób,
bo ja uparcie pozostając przy wykresach tworzonych w makrach, chciałem napisać 6 procedur dla 6 wykresów i napisać do nich odwółanie call w glownej procedurze, ale zawiesił mi się program
każda z procedur odnośnie wykresów wygładała podobnie, różny był tylko zakres i współrzędne umiejscowienia wykresu w arkuszu
Sub rysuj_wykres1()
Sheets("wykresy").Select
Range("A1").Select
Dim X As Integer, zakres As Integer
Dim obiekt As Object
'------------------------------------------
'rysowanie wykresu
Worksheets("wykresy").Activate
ActiveSheet.Shapes.AddChart.Select
'
ActiveChart.ChartType = xlColumnClustered
ActiveChart.SetSourceData Source:=Sheets("podsumowanie").Range(Sheets("podsumowanie").Cells(2, 2), Sheets("podsumowanie").Cells(Rows.Count, 2).End(xlUp))
ActiveChart.HasLegend = False
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
ActiveChart.PlotArea.Select
With ActiveChart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Okres czasu"
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Wartość wskaźnika"
End With
'zagnieżdzenie wykresu w jednym stałym miejscu
With ActiveChart.Parent
'przesunięcie wykresu do komórki D17
.Left = Range("b6").Left
.Top = Range("b6").Top
'rozciągnięcie wykresu do komórki L30
.Width = 330
.Height = 200
'tak również można określać rozmiar wykresu
'Range("H25").Top -Range("c5").Top
End With
ActiveChart.Refresh
End Sub |
|
napisał: Trebor postów: 1209
umieszczony: 21 stycznia 2011 18:21
|
|
Czy ten komunikat dotyczy skoroszytu, który wysłałem (niezmienianego)? Jeśli to coś innego to potrzebuję więcej szczegółów, a najlepiej przykładowy skoroszyt.
Kolejny nr z kolumny A uzyskasz np w ten sposób:
MsgBox Application.WorksheetFunction.Max(Sheets("Arkusz1").Columns(1)) + 1 |
|
napisał: wujek88 postów: 13
umieszczony: 21 stycznia 2011 14:47
|
|
witma, dziękuje za zainteresowanie i za opowiedź, ale ciągłe nie wiem jak to zrobić, po za tym w momencie przejścia do zakładni "wykresy" wyświetla mi komunikat, że formuła użyta w arkuszu zawiera jedno lub więcej nieprawidłowcych odwołań,
mam również pytanie trochę z innej beczki, chciałem stworzyć makro nadające kolejny wolny numer w pierwszej kolumnie po wciśnięciu przycisku dodaj wiersz akursz w załączniku:) za wszelką pomoc bedę bardzo wdzięczny |
|
napisał: Trebor postów: 1209
umieszczony: 19 stycznia 2011 08:55
|
|
Zerknij do załącznika. |
|
napisał: wujek88 postów: 13
umieszczony: 18 stycznia 2011 22:51
|
|
1)no właśnie chyba tak zrobię, tylko jak zdefiniować żeby wykres sam "wiedział" gdzie kończy się zakres danych do ukazania na wykresie. Początek danych zawsze będzie w tym samym miejscu, natomiast końcowy wiersz jest zdefiniowany przez zmienna zakres powiększoną o jeden (1 wiersz to nagłowek)
zmienna zakres jest podawana na userformie i oznacza ilosc jednostek branych do analizy
ale z ciekawości czy jest możliwość w jednej procedurze dodania kilku wykresów:)
2)chciałbym się również dowiedzieć bo nie mogę nic znaleść, czy jest możliwość podpięcia do opisu osi X zmiennej aby cześć tego opisu była stała a cześć zmieniała się w zależności od użytych danych
X = OTIF.horyzont.Value
With ActiveChart
.Axes(xlCategory, xlPrimary).HasTitle = True
.Axes(xlCategory, xlPrimary).AxisTitle.Characters.Text = "Okres czasu:" &okres_czasu
.Axes(xlValue, xlPrimary).HasTitle = True
.Axes(xlValue, xlPrimary).AxisTitle.Characters.Text = "Wartość wskaźnika"
End With |
|
napisał: Trebor postów: 1209
umieszczony: 18 stycznia 2011 14:08
edytowany: 18 stycznia 2011 14:09
|
|
Już pisałem jakie jest moje zdanie o tworzeniu wykresów przez makro. Nie ma takiej potrzeby! Stwórz tyle wykresów ile potrzebujesz, a do danych źródłowych wykorzystaj formuły. Formułę należy tak napisać aby sama wyliczała zajęty zakres.
Tworzenie skoroszytu i usuwanie przycisków:
Sub eksport_analizy()
Dim obiekt As Object
ThisWorkbook.Worksheets("podsumowanie").Copy
With ActiveWorkbook
'kopiuje do nowego skoroszytu
.ActiveSheet.UsedRange.Copy 'kopiuj
.ActiveSheet.UsedRange.PasteSpecial xlPasteValues 'wklej wartości
For Each obiekt In .ActiveSheet.Shapes
obiekt.Delete
Next obiekt
ThisWorkbook.Worksheets("wykresy").Copy after:=.Sheets(1)
End With
End Sub |
|
napisał: wujek88 postów: 13
umieszczony: 18 stycznia 2011 13:25
edytowany: 18 stycznia 2011 13:26
|
|
wszystko działa, fakt nie skojarzyłem, że jak nie ma przerwy to można użyć End(xlUp), dzięki wielkie, moje "dzieło" zaczyna powoli nabierać kształtów:) dzięki Twojej pomocy.
ale jak można utworzyć kilka wykresów w jednym arkuszu, oraz pojawił się kolejny problem bo chiałbym wyeksportować dane z dwóch konkretnych arkuszy podsumowanie i wykresy do nowego pliku, już bez żadnych formuł tylko typowo do oczytu, żeby taki raport wysłać komuś mailem.
stworzyłem coś takiego
Sub eksport_analizy()
Nazwa = Format(Date, "dd.mm.yy") & ".xls"
ThisWorkbook.Worksheets("podsumowanie").Copy
'kopiuje do nowego skoroszytu
ActiveSheet.UsedRange.Copy 'kopiuj
ActiveSheet.UsedRange.PasteSpecial xlPasteValues 'wklej wartości
ActiveWorkbook.SaveAs Filename:=sciezka & Nazwa
'zapisz jako...
End Sub
ale kopiuje mi tylko arkusz podsumowanie ale również buttony, które są w arkuszu podsumowanie. czy można je wyrzucić z nowo utworzonego pliku? |
|
napisał: Trebor postów: 1209
umieszczony: 18 stycznia 2011 07:59
|
|
Jeśli w arkuszu podsumowanie pod danymi dla wykresu nie ma innych danych to wystarczy tak:
Sub wykres()
Worksheets("wykresy").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("podsumowanie").Range(Sheets("podsumowanie").Cells(2, 2), Sheets("podsumowanie").Cells(Rows.Count, 2).End(xlUp))
ActiveChart.HasLegend = False
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
ActiveChart.PlotArea.Select
With ActiveChart
.HasTitle = True
.ChartTitle.Text = "Tytuł wykresu"
End With
End Sub
W ten sposób uzyskujesz samodzielny moduł. Jeśli jednak chcesz powiązać go z Oblicz.click to w tym ostatnim dopisz na końcu linię Call wykres(zakres) Procedura wykres będzie wtedy mieć postać:Sub wykres(wiersze)
Worksheets("wykresy").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("podsumowanie").Range(Sheets("podsumowanie").Cells(1, 2), Sheets("podsumowanie").Cells(wiersze, 2))
ActiveChart.HasLegend = False
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
ActiveChart.PlotArea.Select
With ActiveChart
.HasTitle = True
.ChartTitle.Text = "Tytuł wykresu"
End With
End Sub
Oczywiście zakresy sobie dopasuj do miejsca kopiowania danych źródłowych |
|
napisał: wujek88 postów: 13
umieszczony: 17 stycznia 2011 22:42
|
|
Worksheets("wykresy").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("podsumowanie").Range(Sheets("podsumowanie").Cells(2, 2), Sheets("podsumowanie").Cells(zakres + 1, 2))
ActiveChart.HasLegend = False
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
ActiveChart.PlotArea.Select
With ActiveChart
.HasTitle = True
.ChartTitle.Text = "Tytuł wykresu"
End With
no właśnie chce pobierać bezpośrednio z arkusza, chce rysować z zakresu, gdzie początek jest zawsze stały Cells(2,2) natomiast koniec zakresu ma adres .Cells(zakres+1, 2), gdzie zakres to zmienna podawana na userformie OTIF i właśnie nie wiem jak ją sciągnąć do tego właśnie arkusza
OTIF.jednostki.Value=zakres
nie działa |
|
napisał: Trebor postów: 1209
umieszczony: 17 stycznia 2011 21:24
|
|
Samo kopiowanie danych możesz zrobić pojedynczą linia np. .Range("B" & ostatni - zakres & ":M" & ostatni).Copy Sheets("podsumowanie").Range("A1")
Wstaw ją przed end with
Wykresy proponuję zrobić na stałe. Zakres danych branych do wykresu sugeruję opracować formułą.
Można również pokusić się o pobieranie danych do wykresu wprost z właściwego arkusza (bez kopiowania danych). Wymaga to zapisania nazwy arkusza źródłowego i zakresu w jakimś mniej lub bardziej ukrytym miejscu. |
|
napisał: wujek88 postów: 13
umieszczony: 17 stycznia 2011 20:32
|
|
Cytat: Fakt trochę to zakręcone.
Czy wykres będzie jeden i będzie się tylko zmieniać zakres danych?
Co oznacza, że wykres będzie zawierał max 6 najważniejszych wskaźników - jakie są najważniejsze?
Nie wykresów będzie 6, każdy będzie pobierać zmienne dane, każde dane bedą pochodzić z innej kolumny z arkusza podsumowanie, ogólnie mam problem z przekazaniem danych do arkusza podsumowanie
1)podaje zakres jednostek terminowania
2)zlicza tyle ostatnich wierszy ile podałem w zmiennej zakres
3)dane te chce przenieść do podsumowania, gdzie tworzy się tabela o zmiennej ilości wierszy, maksymalna ilość wierszy =zakres+1
mam nadzieję że trochę jaśniej to wyjaśniłem.:) |
|
napisał: Trebor postów: 1209
umieszczony: 17 stycznia 2011 16:38
|
|
Fakt trochę to zakręcone.
Czy wykres będzie jeden i będzie się tylko zmieniać zakres danych?
Co oznacza, że wykres będzie zawierał max 6 najważniejszych wskaźników - jakie są najważniejsze? |
|
napisał: wujek88 postów: 13
umieszczony: 17 stycznia 2011 12:15
edytowany: 17 stycznia 2011 12:31
|
|
dziękuję bardzo, śmiga jak szalone, masz rację użycie funkcji with...end with sprawi, że kod będzie czytelniejszy.:)
ale jak to mówią apetyt rośnie w miarę jedzenia, w zamierzeniach chciałbym, aby makro tworzyło wykres znajdujący się w zakładce wykresy na podstawie zmiennego zakresu danych, które pojawią się w zakładce podsumowanie, zmienna zakres to ilość jednostek terminowania które determinują ilość wiersz pojawiających się w podsumowaniu, ostatnia wartość w wierszu ma być również ostatnią wartością na wykresie
Sub rysuj_wykres()
Dim zakres As Integer
zakres = OTIF.jednostki
Worksheets("wykresy").Activate
ActiveSheet.Shapes.AddChart.Select
ActiveChart.ChartType = xl3DColumnClustered
ActiveChart.SetSourceData Source:=Sheets("podsumowanie").Range(Cells(2, 2), Cells(zakres + 1, 2))
ActiveChart.HasLegend = False
ActiveChart.ApplyDataLabels Type:=xlDataLabelsShowValue
ActiveChart.PlotArea.Select
With ActiveChart
.HasTitle = True
.ChartTitle.Text = "Tytuł wykresu"
End With
With ActiveChart.Parent
.Height = 200 ' resize
.Width = 250 ' resize
.Top = 100 ' reposition
.Left = 90 ' reposition
End With
End Sub
Narazie tworzyłem to makro po uruchomieniu przycisku Rysuj w zakładce podsumowanie, ale czy jest możliwość podpięcia tego makra do tego
Private Sub Oblicz_Click()
Dim zakres As Integer, ostatni As Integer, g As Integer, numer_wiersz As Integer
Dim suma_a As Double
Dim suma_b As Double
Dim suma_c As Double
Dim suma_d As Double
Dim suma_e As Double
Dim suma_f As Double
Dim suma_g As Double
Dim suma_h As Double
Dim suma_i As Double
Dim suma_j As Double
Dim suma_k As Double
Dim suma_l As Double
If horyzont.Value = "" Then MsgBox "wybierz okres": horyzont.SetFocus: Exit Sub
If IsNumeric(jednostki.Value) = False Then
MsgBox "Złe dane. Popraw."
OTIF.jednostki.SetFocus 'TO TU
Exit Sub
Else
zakres = jednostki.Value
End If
ostatni = 2
With Worksheets(horyzont.Value)
Do While .Cells(ostatni, 1).Value <> ""
ostatni = ostatni + 1
Loop
MsgBox ostatni
For j = ostatni - 1 To ostatni - zakres Step -1
suma_a = .Cells(j, 2).Value
suma_b = .Cells(j, 3).Value
suma_c = .Cells(j, 4).Value
suma_d = .Cells(j, 5).Value
suma_e = .Cells(j, 6).Value
suma_f = .Cells(j, 7).Value
suma_g = .Cells(j, 8).Value
suma_h = .Cells(j, 9).Value
suma_i = .Cells(j, 10).Value
suma_j = .Cells(j, 11).Value
suma_k = .Cells(j, 12).Value
suma_l = .Cells(j, 13).Value
sumaA = suma_a + suma_b
Worksheets("podsumowanie").Cells(zakres + 1, 2).Value = sumaA
sumaB = suma_d + suma_e
Worksheets("podsumowanie").Cells(zakres + 1, 3).Value = sumaB
sumaC = suma_f + suma_g
Worksheets("podsumowanie").Cells(zakres + 1, 4).Value = sumaC
'zle przypisuje, wartosc z ostatniego wiersza jest wartościa pierwsza w tabeli!!
'do zmiany!
'For g = 2 To zakres Step -1
'Worksheets("podsumowanie").Cells(g, 2).Value = sumaA
'Worksheets("podsumowanie").Cells(g, 3).Value = sumaB
'Next g
Next j
'-------------------------------------------------------------
'nadawanie numerów wiersza do podsumowania, jest ok!!
numer_wiersz = 1
For n = 2 To zakres + 1 Step 1
Worksheets("podsumowanie").Cells(n, 1).Value = numer_wiersz
numer_wiersz = numer_wiersz + 1
Next n
Unload OTIF
Worksheets("podsumowanie").Activate 'przenosi mnie do zakładki podsumowanie
End With
End Sub
Założenie
wszystkie wyniki obliczane dzięki funckji Oblicz() przechodziły do zakładki podsumowanie, ale z maks 6. najważniejszych wskazników makro tworzyło od razu wykresy, do szybkiego wzrokowego porównania do zakładki wykresy. trochę to zamotane:) |
|
napisał: Trebor postów: 1209
umieszczony: 17 stycznia 2011 08:00
|
|
Zacznijmy od drugiego pytania. To samo możesz napisać w taki sposób:
With Worksheets("podsumowanie")
.Range("b2").Value = sumaA
.Range("b3").Value = sumaB
.Range("b4").Value = sumaC
End With
Instrukcja With pozwala nam krócej zapisywać odwołanie do arkusza. Makro nie musi za każdym razem odczytywać gdzie zmiany mają być dokonane.
Podobnie jest z pierwszym pytaniem, a linia With Worksheets(horyzont.Value) wskazuje o jaki arkusz chodzi. Wymaga to ujednolicenia nazw arkusza i listy kombo, ale moim zdaniem się opłaca. |
|
napisał: wujek88 postów: 13
umieszczony: 16 stycznia 2011 23:01
|
|
To rozumiem że ten fragment zastępuję powtarzanie funkcji if else, dla wszytskich przypadków?
With Worksheets(horyzont.Value)
Do While .Cells(ostatni, 1).Value <> ""
ostatni = ostatni + 1
Loop
MsgBox ostatni
For j = ostatni To ostatni - 1 - zakres Step -1
suma_dostaw = suma_dostaw + Cells(j, 2).Value
suma_b = suma_b + .Cells(j, 3).Value
suma_c = suma_c + .Cells(j, 4).Value
suma_d = suma_d + .Cells(j, 5).Value
suma_e = suma_e + .Cells(j, 6).Value
suma_f = suma_f + .Cells(j, 7).Value
suma_g = suma_g + .Cells(j, 8).Value
suma_h = suma_h + .Cells(j, 9).Value
suma_i = suma_i + .Cells(j, 10).Value
suma_j = suma_j + .Cells(j, 11).Value
suma_k = suma_k + .Cells(j, 12).Value
suma_l = suma_l + .Cells(j, 13).Value
Next j
End With
skąd prg wie. żeby się odwołać do danego arkusza z danymi?
przeniesienie wartości, zrobiłem tak:
Worksheets("podsumowanie").Range("b2").Value = sumaA
Worksheets("podsumowanie").Range("b3").Value = sumaB
Worksheets("podsumowanie").Range("b4").Value = sumaC |
|
napisał: Trebor postów: 1209
umieszczony: 16 stycznia 2011 18:30
|
|
Masz błędną nazwę Textboxa - zmień na jednostki i wypróbuj takie uproszczenie. Private Sub Oblicz_Click()
Dim zakres As Integer, ostatni As Integer
Dim suma_dostaw As Double
Dim suma_b As Double
Dim suma_c As Double
Dim suma_d As Double
Dim suma_e As Double
Dim suma_f As Double
Dim suma_g As Double
Dim suma_h As Double
Dim suma_i As Double
Dim suma_j As Double
Dim suma_k As Double
Dim suma_l As Double
If horyzont.Value = "" Then MsgBox "wybierz okres": horyzont.SetFocus: Exit Sub
If IsNumeric(jednostki.Value) = False Then
MsgBox "Złe dane. Popraw."
OTIF.jednostki.SetFocus 'TO TU
Exit Sub
Else
zakres = jednostki.Value
End If
ostatni = 2
'------------------------------------------------------------------
With Worksheets(horyzont.Value)
Do While .Cells(ostatni, 1).Value <> ""
ostatni = ostatni + 1
Loop
MsgBox ostatni
For j = ostatni To ostatni - 1 - zakres Step -1
suma_dostaw = suma_dostaw + Cells(j, 2).Value
suma_b = suma_b + .Cells(j, 3).Value
suma_c = suma_c + .Cells(j, 4).Value
suma_d = suma_d + .Cells(j, 5).Value
suma_e = suma_e + .Cells(j, 6).Value
suma_f = suma_f + .Cells(j, 7).Value
suma_g = suma_g + .Cells(j, 8).Value
suma_h = suma_h + .Cells(j, 9).Value
suma_i = suma_i + .Cells(j, 10).Value
suma_j = suma_j + .Cells(j, 11).Value
suma_k = suma_k + .Cells(j, 12).Value
suma_l = suma_l + .Cells(j, 13).Value
Next j
End With
'-------------------------------------------------------------------
sumaA = suma_dostaw + suma_b
sumaB = suma_d + suma_e
sumaC = suma_f + suma_g
Unload OTIF
Worksheets("podsumowanie").Activate 'przenosi mnie do zakładki podsumowanie
Exit Sub
End Sub
Private Sub UserForm_Initialize()
Dim DTime As String
DTime = Format(Date, "ddd, d-mmmm-yyyy")
datetime.Caption = DTime
horyzont.List = Array("dane_tyg", "dane_msc", "dane_polroczne", "dane_rok")
End Sub
Jeśli tak może być napisz jaki masz problem z zapisem danych do arkusza |
|
napisał: wujek88 postów: 13
umieszczony: 16 stycznia 2011 17:09
edytowany: 16 stycznia 2011 17:09
|
|
oto i plik, z którym mam problem. generalnie zamierzenia są takie:
1)odpalam prg wciskam START i przechodzę do menu
2)wciskam analiza wskaźnikowa i odpalam tym userboxa, gdzie z listy wybieram horyzont czasu(który da odpowiedź z której karty zaciągnąć dane) i ilość jednostek terminowania wstecz(zakres do pętli for), które mają być poddane analizie:) wciskam oblicz
3)wyniki wędrują do zakładki podsumowanie, gdzie można je obejrzeć i w razie potrzeby zapisać jako raport.
na początku problem pojawiał się tylko w kwesti przekazania wyników do zakładki podsumowanie
teraz nie chce mi nawet odp. na pytanie który wiersz jest ostatni, tylko błąd wywala
czy sprawdzenie poprawności wpisanych jednostek terminowania w textboxie znajdującym sie na userbox jest dobre? w zamyśle chciałem zrobić:
że w przypadku błednego wpisania program cały czas wracał do tej komórki a nie uruchamiał się dalej.3 |
|
napisał: Trebor postów: 1209
umieszczony: 16 stycznia 2011 08:14
|
|
Jeśli chodzi o ten fragment: sumaA = Sheets("podsumowanie").Range("b2").Value 'przeklejanie danych do podsumowania???? i dwa następne to dane zapisujesz w zmiennej sumaA a nie w arkuszu. Po lewej stronie znaku = jest cel, a po prawej źródło danych. Odwróć wyrażenie.
Jeśli chodzi o coś innego to proszę, zamieść skoroszyt na forum - będzie łatwiej precyzyjnie odpowiedzieć na pytanie. |
|
wszystkich stron: 2
|
|