napisał: admin postów: 613
umieszczony: 28 lipca 2010 22:53
|
|
Błędy zostały poprawione.
Niestety strona główna forum dalej się wolno ładuje, ale to jak już mówiłem sprawa związana z MySQL.
pozdrawiam
admin |
|
|
napisał: admin postów: 613
umieszczony: 27 lipca 2010 00:12
|
|
Co do części pierwszej.
To po prostu mój błąd jako programisty:/
Poprawię jutro!
Część druga - przyglądnę się tematowi, jeśli chodzi o błędy na stronie.
A wolne ładowanie listy wątków... to nie ja jestem winien, tylko kwerenda SQL tak długo się wykonuje. Jak ktoś mi będzie w stanie pomóc, z MySQL to ja bardzo chętnie...
Dziękuję za informację, serdecznie pozdrawiam
admin
Cytat:Cytat:Coś nie umiem wrócić do strony gdzie jak sądzę jest jakiś plik z danymi. [...]
Witam!
No właśnie co jest grane z wątkami, które mają powyżej 20 postów?! Wątki takie są dzielone na dwie podstrony. Ale druga podstrona znika, nie idzie jej otworzyć, natomiast przy próbie wejścia na nią urzytkownik przenoszony jest na drugą podstronę forum, a nie danego wątku:
http://www.vbamania.estrefa.pl/index.php?go=forum&idd=&page=2
Oto linki do takich wątków (przeryłem całe forum, a przecież można posortować wątki wg ilości postów  , ups, dopiero teraz to zauważyłem):
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1886&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1870&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1738&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=739&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=831&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1265&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1019&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=830&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=847&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=683&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=656&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=472&return=watek
Np. ten wątek ma 25 postów, a dostępne jest tylko 20 ostatnich!
Poza tym mała uwaga co do ładowania stron na forum.
Na dole, na pasku stanu pojawia się taki komunikat: ! Błąd na stronie.
Albo:
! Gotowe, ale wystąpiły błędy na stronie.
Poza tym, strona się też wolno ładuje, kiedy wychodzi się z danego wątku, do forum.
Przepraszam autora tego wątku za ten wywód, być może lepiej byłoby napisać osobiście do Admina, w razie czego usunę stąd swój wpis (jeśli można).
Proszę Admina o wypowiedzenie się.
Z pozdrowieniami |
|
|
napisał: markos97 postów: 114
umieszczony: 26 lipca 2010 23:23
edytowany: 26 lipca 2010 23:26
|
|
| Cytat: Coś nie umiem wrócić do strony gdzie jak sądzę jest jakiś plik z danymi. [...]
Witam!
No właśnie co jest grane z wątkami, które mają powyżej 20 postów?! Wątki takie są dzielone na dwie podstrony. Ale druga podstrona znika, nie idzie jej otworzyć, natomiast przy próbie wejścia na nią urzytkownik przenoszony jest na drugą podstronę forum, a nie danego wątku:
http://www.vbamania.estrefa.pl/index.php?go=forum&idd=&page=2
Oto linki do takich wątków (przeryłem całe forum, a przecież można posortować wątki wg ilości postów , ups, dopiero teraz to zauważyłem):
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1886&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1870&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1738&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=739&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=831&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1265&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=1019&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=830&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=847&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=683&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=656&return=watek
http://www.vbamania.estrefa.pl/index.php?go=forum&go2=zobacz&id_watek=472&return=watek
Np. ten wątek ma 25 postów, a dostępne jest tylko 20 ostatnich!
Poza tym mała uwaga co do ładowania stron na forum.
Na dole, na pasku stanu pojawia się taki komunikat: ! Błąd na stronie.
Albo:
! Gotowe, ale wystąpiły błędy na stronie.
Poza tym, strona się też wolno ładuje, kiedy wychodzi się z danego wątku, do forum.
Przepraszam autora tego wątku za ten wywód, być może lepiej byłoby napisać osobiście do Admina, w razie czego usunę stąd swój wpis (jeśli można).
Proszę Admina o wypowiedzenie się.
Z pozdrowieniami |
|
|
napisał: Trebor postów: 1209
umieszczony: 8 lipca 2010 20:19
|
|
Coś nie umiem wrócić do strony gdzie jak sądzę jest jakiś plik z danymi.
Zamieść proszę skoroszyt z makrem, bo bez tego trudno zrozumieć o co tu chodzi, a pamięcią tak daleko niestety nie sięgam.
Hej |
|
|
napisał: mwl postów: 4
umieszczony: 6 lipca 2010 14:05
|
|
| Cytat: Wielkie dzięki Trebor za kawał wspaniałej roboty. Teraz wszystko działa idealnie. Podziękowania również dla Artika, który pomógł w testowaniu makra. Jeszcze raz dzięki Trebor:):):).
Pozdrawiam
Paweł
Niestety makro nie radzi sobie z rozchodowaniem w przypadku gdy musi podzielić "paczki" kupionego towaru:
Kupno 28000 po 1
Sprzedaż 28000 po 2
Kupno 44832 po 3
Kupno 62000 po 4
Sprzedaż 50000 po 5
Sprzedaż 56832 po 6
Przy sprzedaży 50000 makro wylicza błędną wartość zakupu. Powinno być:
Sprzedaż 44832 * 3 + Sprzedaż 5168 * 4 = 155 168,00 a pokazuje 20 672,00 czyli tylko tą część: Sprzedaż 5168 * 4 - gubi pierwszą część.
Jeśli zamienić 3 i 4 kupno miejscami do postaci:
Kupno 28000 po 1
Sprzedaż 28000 po 2
Kupno 62000 po 3
Kupno 44832 po 4
Sprzedaż 50000 po 5
Sprzedaż 56832 po 6 wtedy sobie radzi... |
|
|
napisał: pawel30 postów: 40
umieszczony: 28 listopada 2006 22:23
|
|
Wielkie dzięki Trebor za kawał wspaniałej roboty. Teraz wszystko działa idealnie. Podziękowania również dla Artika, który pomógł w testowaniu makra. Jeszcze raz dzięki Trebor:):):).
Pozdrawiam
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 28 listopada 2006 21:38
|
|
Czy prawidłowo to nie wiem ale może zrobić tak - na początku makra wkopiuj linię
On Error GoTo koniec
na samym końcu linie (przed End sub)
Exit Sub
koniec:
MsgBox "Wystapił błąd przy obliczeniach dla wiersza " & a
Cells(a, 1).Select |
|
|
napisał: pawel30 postów: 40
umieszczony: 28 listopada 2006 21:16
|
|
Witam:).
Podczas testowania Twojego ostatniego makra Trebor przez pomyłkę wprowadziłem zamiast liczby w kolumnie ilość przecinek wówczas pojawił się błąd Run time error "13": Type mismatch. Wiem, że trzeba wprowadzić obsługę błędów ale nie mam pojęcia jak to zrobić prawidłowo. Proszę więc o dalszą pomoc.
Pozdrawiam
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 28 listopada 2006 15:17
|
|
To koszuje kolejne testy :D
Sub mag()
Dim suma_przychód As Double
Dim suma_rozchód As Double
Dim a As Long
Dim b As Long
Dim pozostało As Double
Dim w_wierszu As Long
Dim skończono As Long
Dim kwota As Double
Dim ile As Double
w_wierszu = 2
skończono = 2
For a = 2 To Range("A65536").End(xlUp).Row
If Left(UCase(Cells(a, 1)), 3) <> "PRZ" And Left(UCase(Cells(a, 1)), 3) <> "ROZ" And Left(UCase(Cells(a, 1)), 2) <> "BO" Then Cells(a, 4) = ""
If Mid(UCase(Cells(a, 1)), 1, 3) = "PRZ" Or Left(UCase(Cells(a, 1)), 2) = "BO" Then suma_przychód = suma_przychód + Cells(a, 2)
If Mid(UCase(Cells(a, 1)), 1, 3) = "ROZ" Then
suma_rozchód = suma_rozchód + Cells(a, 2)
'If suma_przychód < suma_rozchód Then MsgBox "Rozchód jest większy od Przychodu."
If suma_przychód < suma_rozchód Then
Cells(a, 2).Select
MsgBox "Rozchód " & suma_rozchód & " jest większy od przychodu " & suma_przychód
'cells(a,2) = "" 'odblokuj linie jeśli chcesz usunąć błędną ilość
'cells(a,4) = ""
Application.EnableEvents = True
End
End If
'gdy pozostało jest większy lub równy od rozchodu dla wiersza
If pozostało >= Cells(a, 2) Then
Cells(a, 4) = Cells(a, 2) * Cells(w_wierszu, 3)
pozostało = pozostało - Cells(a, 2)
Else
For b = skończono To Range("A65536").End(xlUp).Row
If Mid(UCase(Cells(b, 1)), 1, 3) = "PRZ" Or Left(UCase(Cells(b, 1)), 2) = "BO" Then
'gdy przychód dla wiersza jest większy lub równy od rozchodu dla wiersza
If Cells(b, 2) + pozostało + ile >= Cells(a, 2) Then
Cells(a, 4) = pozostało * Cells(w_wierszu, 3) + Cells(b, 3) * (Cells(a, 2) - pozostało - ile) + kwota
pozostało = pozostało + Cells(b, 2) - Cells(a, 2) + ile
w_wierszu = b
kwota = 0
ile = 0
Exit For
'gdy rozchód jest większy od przychodu w wierszu
Else
kwota = kwota + Cells(b, 4)
ile = ile + Cells(b, 2)
End If
End If
Next b
skończono = b + 1
End If
End If
Next a
End Sub
Pozdrawiam |
|
|
napisał: pawel30 postów: 40
umieszczony: 28 listopada 2006 13:01
|
|
Przetestowałem szybciutko twoje nowe makra Trebor.
Ponieważ kasowana była wartość z komórki D1 więc zmieniłem w makrze zaznaczanie kolumny A od drugiego wiersza. Wprowadzałem różne kombinacje i za każdym razem makro wyliczało wartości prawidłowo.
Prosił bym jeszcze o modyfikację makra tak aby uwzględniało Bilans otwarcia, który będę wprowadzał na początku w drugim wierszu i oznaczał w skrócie BO. Bilans otwarcia powinien być traktowany jak przychód.
Mam jeszcze do Ciebie Trebor jedną prośbę. Otóż po pojawieniu się komunikatu, że "Rozchód jest większy od Przychodu" fajnie by było, żeby makro skasowało błedną ilość rozchodu oraz błedną wyliczoną wartość i ustawiło się ponownie w komórce, w której wwprowadzono niewłaściwą ilość.
Pozdrawiam
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 28 listopada 2006 12:01
|
|
To mnie wypunktował ;)
Oto kolejna wersja - jak zwykle mało testowana
Sub mag()
Dim suma_przychód As Double
Dim suma_rozchód As Double
Dim a As Long
Dim b As Long
Dim pozostało As Double
Dim w_wierszu As Long
Dim skończono As Long
Dim kwota As Double
Dim ile As Double
w_wierszu = 2
skończono = 2
For a = 1 To Range("A65536").End(xlUp).Row
If Left(UCase(Cells(a, 1)), 3) <> "PRZ" And Left(UCase(Cells(a, 1)), 3) <> "ROZ" Then Cells(a, 4) = ""
If Mid(UCase(Cells(a, 1)), 1, 3) = "PRZ" Then suma_przychód = suma_przychód + Cells(a, 2)
If Mid(UCase(Cells(a, 1)), 1, 3) = "ROZ" Then
suma_rozchód = suma_rozchód + Cells(a, 2)
If suma_przychód < suma_rozchód Then MsgBox "Rozchód jest większy od Przychodu."
'gdy pozostało jest większy lub równy od rozchodu dla wiersza
If pozostało >= Cells(a, 2) Then
Cells(a, 4) = Cells(a, 2) * Cells(w_wierszu, 3)
pozostało = pozostało - Cells(a, 2)
Else
For b = skończono To Range("A65536").End(xlUp).Row
If Mid(UCase(Cells(b, 1)), 1, 3) = "PRZ" Then
'gdy przychód dla wiersza jest większy lub równy od rozchodu dla wiersza
If Cells(b, 2) + pozostało + ile >= Cells(a, 2) Then
Cells(a, 4) = pozostało * Cells(w_wierszu, 3) + Cells(b, 3) * (Cells(a, 2) - pozostało - ile) + kwota
pozostało = pozostało + Cells(b, 2) - Cells(a, 2) + ile
w_wierszu = b
kwota = 0
ile = 0
Exit For
'gdy rozchód jest większy od przychodu w wierszu
Else
kwota = kwota + Cells(b, 4)
ile = ile + Cells(b, 2)
End If
End If
Next b
skończono = b + 1
End If
End If
Next a
End Sub
Co do procedury Worksheet_Change to proponuję tak
If Target.Column < 5 Then
Application.EnableEvents = False
Call mag
Application.EnableEvents = True
End If
End Sub
ponieważ zmiany nie tylko rozchodu mają wpływ na poprawność wyliczeń.
Pozdrawiam |
|
|
napisał: pawel30 postów: 40
umieszczony: 28 listopada 2006 08:39
|
|
Witam:).
Wygląda na to, że słabo przetestowałem makro. Nie przewidziałem bowiem sytuacji, w której rozchód pierwszy będzie równy drugiemu przychodowi, wówczas makro nie wycenia kolejnego rozchodu.
Makro to niezwykle mnie zaciekawiło. Próbowałem przeanalizować
je i zrozumieć istotę jego działania ale moja wiedza na temat VBA umożliwiła mi jedynie modyfikację makra tak aby wartość rozchodu była wpisywana w kolumnie D.
Wszelkie moje próby modyfikacji makra aby np. brany był pod uwagę bilans otwarcia i traktowany jak przychód spełzły na niczym.
Będę wdzięczny za dalszą pomoc w usprawnieniu makra.
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 27 listopada 2006 09:46
|
|
| Cytat: Trebor
Co do ostatniej procedury.
W jakim celu jest pętla For Each...Next, skoro Target zawiera jedną komórkę? Przynajmniej tak mi się wydaje. I drugie. Dlaczego Mid() a nie Left()?
Artik
Hej
Jest to zabezpieczenie przed wysypaniem się makra gdy użytkownik zmieni jednorazowo więcej niż jedną komórkę (wkopiuje, usunie).
Co do mid to nie wiem dlaczego tak napisałem. Tak mi przyszło do głowy za pierwszym razem i już poszło z rozpędu wszędzie. Oczywiście można to zmienić na left.
Rozumiem, że z czystej sympatii nie zwróciłeś mi uwagi na straszny styl makra zasadniczego (braku formatowania ułatwiającego analizę), ale zwróć uwagę że i tak dokonałem postępu nazywając zmienne w taki sposób aby przybliżały co sobą reprezentują (a nie tak jak to miałem w zwyczaju a, b, c,...):p
Pozdrawiam |
|
|
napisał: pawel30 postów: 40
umieszczony: 27 listopada 2006 07:14
|
|
Dzięki:).
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 26 listopada 2006 22:35
|
|
Pamiętaj, że makro działa na całym zakresie danych. Jeśli coś zmienisz w kolumnie B a w kolumnie A w wierszu zmienianym będzie "Roz" wtedy makro przeliczy wszystko od początku nadpisując dane. Nie ma w makrze sprawdzenia czy dane są kompletne.
Poniższe makro wklej po kliknięciu prawym klawiszem myszy na nazwie arkusza i wybraniu wyświetl kod. Makro będzie wywoływać makro o nazwie Mag
Private Sub Worksheet_Change(ByVal Target As Range)
Dim komorka As Range
If Target.Column = 2 Then
For Each komorka In Target
If Mid(UCase(komorka.Offset(0, -1)), 1, 3) = "ROZ" Then Call mag: Exit For
Next
End If
End Sub
Pozdrawiam |
|
|
napisał: pawel30 postów: 40
umieszczony: 26 listopada 2006 20:53
|
|
Przepraszam Cię Trebor ale nie zauważyłem Twojego postu z godz.19:14.
To makro działa dokładnie w taki sposób jak potrzebuję.
Wielkie dzięki za pomoc:). Z przyjmnością poczekam teraz na deser.
Paweł |
|
|
napisał: pawel30 postów: 40
umieszczony: 26 listopada 2006 19:52
|
|
Dane:
treść ilość wartość
PRZ 10 100 ( cena 10 )
PRZ 10 120 ( cena 12 )
ROZ 5 50 ( ok )
ROZ 6 62 ( ok )
ROZ np.1 108 ( powinno być 12 )
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 26 listopada 2006 19:29
|
|
| Podaj dane dla których występuje błąd. |
|
|
napisał: pawel30 postów: 40
umieszczony: 26 listopada 2006 19:20
|
|
Tym razem makro wycenia kolejny rozchód ale za każdym razem wartość trzeciego rozchodu ( dla ilości, które można jeszcze rozchodować ) jest różnicą pomiędzy sumą przychodów pierwszego i drugiego oraz sumą rozchodów pierwszego i drugiego.
Paweł |
|
|
napisał: Trebor postów: 1209
umieszczony: 26 listopada 2006 19:14
|
|
Pośpieszyłem się 
Sub mag()
Dim suma_przychód As Double
Dim suma_rozchód As Double
Dim a As Long
Dim b As Long
Dim pozostało As Double
Dim w_wierszu As Long
Dim skończono As Long
Dim kwota As Double
Dim ile As Double
w_wierszu = 2
skończono = 2
For a = 1 To Range("A65536").End(xlUp).Row
If Mid(UCase(Cells(a, 1)), 1, 3) = "PRZ" Then suma_przychód = suma_przychód + Cells(a, 2)
If Mid(UCase(Cells(a, 1)), 1, 3) = "ROZ" Then
suma_rozchód = suma_rozchód + Cells(a, 2)
If suma_przychód < suma_rozchód Then MsgBox "Rozchód jest większy od Przychodu."
'gdy pozostało jest większy lub równy od rozchodu dla wiersza
If pozostało >= Cells(a, 2) Then
Cells(a, 3) = Cells(a, 2) * Cells(w_wierszu, 3)
pozostało = pozostało - Cells(a, 2)
Else
For b = skończono To Range("A65536").End(xlUp).Row
If Mid(UCase(Cells(b, 1)), 1, 3) = "PRZ" Then
'gdy przychód dla wiersza jest większy lub równy od rozchodu dla wiersza
If Cells(b, 2) + pozostało + ile >= Cells(a, 2) Then
Cells(a, 3) = pozostało * Cells(w_wierszu, 3) + Cells(b, 3) * (Cells(a, 2) - pozostało - ile) + kwota
pozostało = pozostało + Cells(b, 2) - Cells(a, 2)
w_wierszu = b
kwota = 0
ile = 0
Exit For
'gdy rozchód jest większy od przychodu w wierszu
Else
kwota = kwota + Cells(b, 4)
ile = ile + Cells(b, 3)
End If
End If
Next b
End If
End If
skończono = b + 1
Next a
End Sub |
|
|
wszystkich stron: 2
|
|