Elektroda.pl
Elektroda.pl
X
Proszę, dodaj wyjątek www.elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

VBA - proszę o sprawdzenie fragmentu kodu.

sharminte 25 Sty 2016 10:43 744 14
  • #1 25 Sty 2016 10:43
    sharminte
    Poziom 5  

    tak jak w temacie, proszę o sprawdzenie fragmentu kodu + ewentualnie podpowiedzenie co mam poprawić w celu prawidłowego działania.

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    miało to mieć na celu wprowadzone przez użytkownika dane uzupełniać wiersz po wierszu. dajmy na to pobiera wartość "godzina" i "minuta" dla wejścia i wyjścia (stąd 4x pobierane dane) osobnika z tym, że niestety nie chce uzupełniać tego wiersz po wierszu, uzupełniane zostaje cały czas w tym samym wierszu.

    Z góry dziękuje za pomoc

    0 14
  • Pomocny post
    #2 25 Sty 2016 11:57
    JRV
    Specjalista - VBA, Excel

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #3 25 Sty 2016 14:28
    sharminte
    Poziom 5  

    dziękuję, kod śmiga z tym że musiałem w tym oto miejscu:

    Code:
    wiersz = Application.WorksheetFunction.CountA(Range("E:E")) + 1 

    zamiast 1 dać 2 bo nie wiedzieć czemu akurat od tej linii kodu zaczynał on o wiersz wcześniej wstawiać dane przez co podmieniał mi nagłówki tabeli :)

    Chciałem go jeszcze troszkę zmodernizować ale napotkałem 2 problemy ponieważ nie działa (moja modernizacja) tak jak powinna w momencie dopisania warunku:
    Code:
    If OptionButton1 = 0 Or OptionButton2 = 0 Then GoTo start


    po edycji kod wygląda następująco:
    Kod: vbscript
    Zaloguj się, aby zobaczyć kod


    Program się wiesza i wywraca,że tak powiem, na plecy :) Założeniem tej modyfikacji było żeby konieczne było wybranie jednego z optionbox'ów gdyż w przeciwnym razie nie wykona się operacja dopisania godziny do tabelki.

    Interesuje mnie również nieco inna modyfikacja aczkolwiek nie chciałem zbytnio kombinować żeby nie namieszać sobie w kodzie za bardzo. A mianowicie, chciałbym aby po wprowadzeniu pierwszych wartości tj.:



    Code:

    Cells(wiersz, 3) = TextBox1.Text
    Cells(wiersz, 4) = TextBox2.Text


    wystąpiła swoistego rodzaju blokada, tj. do momentu dopóki nie zostanie wprawadzona wartość z następnych 2 kolumn tj.:

    Code:

    Cells(wiersz, 5) = TextBox1.Text
    Cells(wiersz, 6) = TextBox2.Text


    kody te reprezentują u mnie w tabelce odpowiednio godzine oraz ilość minut po pełnej godzinie w przypadku rozpoczęcia i zakończenia pracy nad jakimś projektem.

    przez blokadę mam na myśli że makro nie pozwoli mi wprowadzić kolejnej wartości (wiersz poniżej) w kolumnie rozpoczęcia dopóki nie wprowadzę w tym samym wierszu pory zakończenia oraz odwrotnie, żeby nie można było wprowadzić daty zakończenia bez podania daty rozpoczęcia.

    Czy jest to możliwe? i czy bardzo to komplikuje złożoność kodu ?

    0
  • #4 25 Sty 2016 14:48
    JRV
    Specjalista - VBA, Excel

    Pierwsze próby żeby konieczne było wybranie

    Code:
    If Not OptionButton1 And Not OptionButton2 Then GoTo start
    

      If OptionButton1 Then GoTo zaczyna
      If OptionButton2 Then GoTo konczy 


    Code:
    zaczyna: 
    
    wiersz = Application.WorksheetFunction.CountA(Range("C:C")) + 1
    If Cells(wiersz - 1, 5) = "" Then
       MsgBox "Nie została zakończona przed" : GoTo start
    End If
    Cells(wiersz, 3) = TextBox1.Text
    Cells(wiersz, 4) = TextBox2.Text
    GoTo koniec


    Tylko cos za bardzo tych 'GoTo'
    Nie przyzwyczaić się do tego

    P.S. edytowano (wiersz - 1, 5)

    0
  • #5 25 Sty 2016 15:11
    sharminte
    Poziom 5  

    z tym 3cim if'em dalej jest niestety problem :(

    chyba że ja coś skopałem i nie tak wrzuciłem :

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    0
  • #6 25 Sty 2016 15:17
    JRV
    Specjalista - VBA, Excel

    Trudno powiedzieć coś bez konieczności zobaczyc układ arkusza(nagłówki, scalone komórki, itp.)
    Dołączanie pliku.

    0
  • #7 25 Sty 2016 15:23
    sharminte
    Poziom 5  

    VBA - proszę o sprawdzenie fragmentu kodu.

    Tak wygląda u mnie tabelka

    Code:

    If Cells(wiersz - 1, 5) = "" Then
       MsgBox "Nie została zakończona przed": GoTo start
    End If


    Ten element działa z tym że również zapętla całkowicie program w sposób podobny do tego który występuje jeżeli optionbox nie jest zaznaczony, ale to może rozpracuje się w między czasie. Teraz analogicznie, czy jeżeli dodam następujący kod:

    Code:

    If Cells(wiersz , 6) = "" Then
       MsgBox "Nie została zakończona przed": GoTo start
    End If


    czy myślę w dobrym kierunku ? wydaje mi się że
    Code:
    GoTo start ... start: ...
    ale nie jestem w 100% pewien

    0
  • #8 25 Sty 2016 15:43
    JRV
    Specjalista - VBA, Excel

    Dobry kierunek - to nie obrazek a przykladowy plik, w szczególności, UserForm.
    Logiczne czas wpisac w jednym TextBox w formacie "gg:mm".
    Zamiast pola wyboru najlepsze radio guzik(Option Button), wtedy coś musi być zaznaczone.

    0
  • #9 25 Sty 2016 16:55
    sharminte
    Poziom 5  

    Sęk w tym że to są właśnie Option Buttony. :)


    w załączeniu SS okna graficznego Formularzu o którym cały czas mowa, oraz jego kod, no i oczywiście żeby był w 1 miejscu rozkład tabelki


    VBA - proszę o sprawdzenie fragmentu kodu. VBA - proszę o sprawdzenie fragmentu kodu. VBA - proszę o sprawdzenie fragmentu kodu.

    0
  • #11 26 Sty 2016 20:43
    sharminte
    Poziom 5  

    Stworzyłem o oparciu o Pana plik coś takiego:

    Kod: vbscript
    Zaloguj się, aby zobaczyć kod

    i działa prawie idealnie.
    Prawie, ponieważ gdzieś jest błąd i nie robi do końca tak jak powinien.

    VBA - proszę o sprawdzenie fragmentu kodu.

    Tak to wygląda po wprowadzeni PIERWSZEJ godziny startu, z kolei jeżeli wprowadzę jako pierwszą godzinę zakończenia działa ok, wyrzuca błąd tj. że godzina rozpoczęcia nie została podana, po czym wpisuje w rubryce rozpoczęcia błąd a we właściwej godzinę.

    Od momentu widocznego na screenie działa już normalnie, tj jeżeli w komórce o adresie (4,3) w wyniku tego błędu wprowadzona jest godzina. Jeżeli spróbuje dodać ponownie godzinę startu, to wyrzuca mi błąd w tym samym wierszu, ale w kolumnie obok (czyli tak jak powinien) po czym wprowadzi godzinę wiersz niżej w godzinie rozpoczęcia(czyli tak jak powinien). Kod zdaje się ignorować w momencie podawania godziny startu komórkę (3,3) tak, jak by była uzupełniona, pomimo że nie jest.

    0
  • Pomocny post
    #12 26 Sty 2016 20:58
    JRV
    Specjalista - VBA, Excel

    Zapobiega te słowo 'brak'. CountA liczy je.

    0
  • #13 26 Sty 2016 22:16
    sharminte
    Poziom 5  

    tylko czemu zignorował pierwszą komórkę w momencie podawania startu ?
    udokumentowałem Screenami co się dzieje :) tego co tu się dzieje nie rozumiem :) o ile potrafie zruzumieć że przeskoczyło na 2gi wiersz bo uzupełniło 1 w drugiej kolumnie słowem błąd to nie rozumiem dlaczego uzupełniło w ogóle to błędem skoro w pierwszym wierszu pierwszej kolumny nie ma nic.

    VBA - proszę o sprawdzenie fragmentu kodu. VBA - proszę o sprawdzenie fragmentu kodu. VBA - proszę o sprawdzenie fragmentu kodu. VBA - proszę o sprawdzenie fragmentu kodu.

    0
  • #14 26 Sty 2016 22:35
    JRV
    Specjalista - VBA, Excel

    wiersz = Application.WorksheetFunction.CountA(Range("C:C")) + 1 '=wiersz 2

    If Cells(wiersz - 1, 4) = "" Then 'wiersz -1 = wiersz 1, tam ""(pusto)

    Dlaczego nie używana metoda ostatniego wiersza wolnego, jak mojem makro?

    0
  • #15 26 Sty 2016 23:04
    sharminte
    Poziom 5  

    Dziękuję, już działa :)

    0