Musisz w procedurze stwierdzić jaki jest aktualnie miesiąc, a jak to zrobić?
Użyć funkcji wbudowanych w StarBasica. Spis wszystkich funkcji z przykładami ich wykorzystania, masz w pomocy .
W tym przypadku wykorzystam funkcjie Daty i czasu, czyli
Month() i
Now(). Wykorzystując jako argument, funkcje Now() (po polsku teraz), w funkcji Month() (po polsku miesiąc) otrzymasz numer aktualnego miesiąca czyli 3.
Więc Podstawiając to w miejscu twojej jedynki, otrzymasz to co chcesz, ale tylko w przypadku z pierwszego postu.
Kod: Zaznacz cały
ThisComponent.Sheets.getByName("Bilans").getCellByPosition(Month(Now())-1,PustyZakres.StartRow).setValue(z)
Tymczasem zmieniłeś organizację arkusza
Bilns i indeksy kolumn miesięcy przyrastają o 2, więc musisz coś wykombinować co pozwoliłoby zwiększać indeks kolumny o odpowiednią wartość
Jedyną z możliwości jest deklaracja tablicy miesięcy z zawartością odpowiedniego indeksu.
Uwaga: Instrukcja
Option Base 1 Musi być umieszczona na samej górze modułu, tak jakbyś deklarował zmienną dostępną dla wszystkich procedur w tym module.
Następnie trzeba ją wypełnić danymi:
Kod: Zaznacz cały
For i = 0 To 11
Miesiac(i + 1) = i - 1
Next i
Umieść to przed wykonaniem linii wpisującej dane do arkusza bilans. Teraz podstawiając poniższą konstrukcję we wiadome miejsce uzyskasz to czego oczekujesz.
Cała linia ma mieć postać:
Kod: Zaznacz cały
ThisComponent.Sheets.getByName("Bilans").getCellByPosition(Month(Now()) + miesiac(Month(Now()),PustyZakres.StartRow).setValue(z)
Teraz mała dygresja:
W poprzednim poście wspominałem o prawidłowej organizacji danych, teraz dorzucę jeszcze dogłębne przemyślenie zagadnienia. Rozwiązanie które zaproponowałem choć na ten czas wydaje się prawidłowe, kiedyś doprowadzi cię do szewskiej pasji np:
Mamy marzec 2016 a ty chcesz użyć danych ze stycznia 2016, a w tej konfiguracji będzie to możliwe po zmianie daty systemowej na odpowiedni miesiąc co jednorazowo nie jest problemem ale redagując klika miesięcy już nie jest różowe, lub edycji kodu.
Dlaczego to zaproponowałem?
Zaproponowałem ponieważ dróg do uzyskania satysfakcjonującego wyniku może być wiele, a twoim zadaniem jest wybrać tą najbardziej optymalną. To co na pierwszy moment może być tym najlepszym, wcale takim nie musi być. Gwarantuje ci że patrząc po kilku miesiącach na to co stworzyłeś dziś, rozwiązałbyś to całkiem inaczej. I teraz wyzwaniem jest zrobienie tego tak, żeby przeróbki ograniczyć do minimum.
Jak to ulepszyć?
Rozwiązań może być wiele, ja zaproponuje 2.
1. W kodzie z wykorzystaniem funkcji
InputBox()
Kod: Zaznacz cały
For i = 0 To 11
Miesiac(i + 1) = i - 1
Next i
temp = inputbox("Wpisz numer miesiąca","Miesiąc",Month(now))
temp = Miesiac(temp) + temp
ThisComponent.Sheets.getByName("Bilans").getCellByPosition(temp ,PustyZakres.StartRow).setValue(z)
2. Pobranie numeru miesiąca z komórki, specjalnie do tego przeznaczonej. A że wiesz jak pobrać dane z komórki, pominę tę część i skupię się na tym jak do tego podejść. I znów rozwiązań może być co najmniej kilka:
1. Wpisanie bezpośrednio z palca.
2. Lista wartości z poprawności danych.
3. Stworzenie tabeli miesięcy i ich wartości. Wykorzystanie poprawności danych i funkcji Wyszukaj.Poziomo().
4. i wiele innych rozwiązań.
Myślę że wystarczy tego na dziś.
Pa.