Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

Witam, szukałem rozwiązania problemu w innych wątkach, ale niestety nie udało mi się uzyskać rozwiązania.

Posiadam w skoroszycie excel 3 arkusze(rejestr, zas_1, zas_2, zas_3).
W rejestrze wpisuję pewne dane (w sumie ok 10 kolumn z danymi)
11 kolumna to data wydruku, która ma wpisywać się automatycznie w dniu wydruku.

Założenia do działania kodu VBA:
1. po kliknięciu przycisku ,,drukuj", kod sprawdza, czy w kolumnie 11 jest data wydruku, jeżeli jest to przechodzi do kolejnego wiersza i tak, aż znajdzie komórkę bez daty wydruku, zakładając że w tym samym wierszu komórka z kolumny 1 nie jest pusta.
2. przenoszone są wszystkie dane (10 kolumn) z tego wiersza ("rejestr") do arkusza: zas_1, zas_2 lub zas_3 (arkusze wybierane są na podstawie danych w kolumnie 2 ("rejestr"), gdzie użytkownik w kolumnie 2 wybiera z listy rozwijanej ZAS_1,ZAS_2,ZAS_3)
3. Drukowany jest arkusz zas_1,zas_2 lub zas_3, i program przechodzi do kolejnego wiersza w arkuszu "rejestr" i powtarza pkt. 1,2 3. zatrzyma się, jeżeli będzie pusta wartość w kolumnie 11(data wydruku), lub nie będzie wartości w kolumnie 11(data wydruku) i nie będzie wartości w kolumnie 1.

Będę wdzięczny za każdą pomoc.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

Z którym elementem algorytmu masz problem?
Pokaż co dotychczas napisałeś.

Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

Sub start()
x=4

If Not IsEmpty(Sheets("rejestr").Cells(x,18) Then 'sprawdza czy jest wpisany 1 z warunków w rejestrze
If Not IsEmpty(Sheets("rejestr").Cells(x,13) Then 'sprawdza czy jest wpisany 2 z warunków w rejestrze
If IsEmpty(Sheets("rejestr").Cells(x,12) Then 'czy jest data wydruku (wcześniej pisałem że kolumna 11, ale to jest 12)

Sheets("rejestr").Cells(x,5)="ZAS_1" 'Tutaj sprawdza czy jest ZAS_1 i wybiera arkusz zas_1,gdzie wrzuca poniższe komórki.
Sheets("zas_1").Cells(18,17)=Sheets("rejestr").Cells(x,2)
Sheets("zas_1").Cells(50,2)=Sheets("rejestr").Cells(x,3)
Sheets("zas_1").Cells(50,10)=Sheets("rejestr").Cells(x,11)
Sheets("zas_1").Cells(50,11)=Sheets("rejestr").Cells(x,33)
Sheets("zas_1").Cells(29,9)=Sheets("rejestr").Cells(x,14)
Sheets("zas_1").Cells(29,14)=Sheets("rejestr").Cells(x,15)
Sheets("zas_1").Cells(18,6)=Sheets("rejestr").Cells(x,18)
Sheets("zas_1").Cells(18,12)=Sheets("rejestr").Cells(x,19)
Sheets("zas_1").Cells(21,13)=Sheets("rejestr").Cells(x,20)
Sheets("zas_1").Cells(21,15)=Sheets("rejestr").Cells(x,21)
Sheets("zas_1").Cells(18,16)=Sheets("rejestr").Cells(x,22)

Sheets("rejestr").cells(x,12) = Date
End if
End if
End if

następny:
x=x+1

End Sub

Tyle udało mi się napisać czytając artykuły i oglądając tutoriale (nie pisałem nigdy wcześniej vba).
Z powyższego kodu, po kliknięciu na przycisk z przypisanym makrem, przenosi mi dane po spełnieniu warunków do arkusza zas_1 i wstawia datę.

Ale potrzebuje, żeby
1. po wybraniu w sheets("rejestr").cells(x,5) program przenosil dane do arkusza ZAS_1,ZAS_2 lub ZAS_3 w zależności od tego która opcja jest w komórce.
2. arkusz do którego zostały przeniesione dane z wiersza został wydrukowany (najlepiej jak dałoby się wybrać drukarkę, ponieważ narzędzie będzie działało na różnych komputerach z różnie nazwanymi drukarkami) i dopiero po tym zostanie wpisana dzisiejsza data (Sheets("rejestr").cells(x,12) = Date).
3. zostanie to wrzucone do pętli po nadaniu powyższej daty.

4 Nie koniecznie, ale jeżeli ktoś potrafi, to czy trudno jest napisać kod, który na koniec wyświetli komunikat z ilością wydrukowanych arkuszy zas_1, zas_2 i zas_3.

Bardzo proszę o pomoc.
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

Piotr T.:
Sub start()
x=4

If Not IsEmpty(Sheets("rejestr").Cells(x,18) Then 'sprawdza czy jest wpisany 1 z warunków w rejestrze
If Not IsEmpty(Sheets("rejestr").Cells(x,13) Then 'sprawdza czy jest wpisany 2 z warunków w rejestrze
If IsEmpty(Sheets("rejestr").Cells(x,12) Then 'czy jest data wydruku (wcześniej pisałem że kolumna 11, ale to jest 12)

Sheets("rejestr").Cells(x,5)="ZAS_1" 'Tutaj sprawdza czy jest ZAS_1 i wybiera arkusz zas_1,gdzie wrzuca poniższe komórki.
Sheets("zas_1").Cells(18,17)=Sheets("rejestr").Cells(x,2)
Sheets("zas_1").Cells(50,2)=Sheets("rejestr").Cells(x,3)
Sheets("zas_1").Cells(50,10)=Sheets("rejestr").Cells(x,11)
Sheets("zas_1").Cells(50,11)=Sheets("rejestr").Cells(x,33)
Sheets("zas_1").Cells(29,9)=Sheets("rejestr").Cells(x,14)
Sheets("zas_1").Cells(29,14)=Sheets("rejestr").Cells(x,15)
Sheets("zas_1").Cells(18,6)=Sheets("rejestr").Cells(x,18)
Sheets("zas_1").Cells(18,12)=Sheets("rejestr").Cells(x,19)
Sheets("zas_1").Cells(21,13)=Sheets("rejestr").Cells(x,20)
Sheets("zas_1").Cells(21,15)=Sheets("rejestr").Cells(x,21)
Sheets("zas_1").Cells(18,16)=Sheets("rejestr").Cells(x,22)

Sheets("rejestr").cells(x,12) = Date
End if
End if
End if

następny:
x=x+1

End Sub

Tyle udało mi się napisać czytając artykuły i oglądając tutoriale (nie pisałem nigdy wcześniej vba).
Z powyższego kodu, po kliknięciu na przycisk z przypisanym makrem, przenosi mi dane po spełnieniu warunków do arkusza zas_1 i wstawia datę.

Ale potrzebuje, żeby
1. po wybraniu w sheets("rejestr").cells(x,5) program przenosil dane do arkusza ZAS_1,ZAS_2 lub ZAS_3 w zależności od tego która opcja jest w komórce.
dim zak as string
dim wydr1&, wydr2&, wydr
if sheets("rejestr").cells(x,5) = "cośtam1" then
zak = "jakastam1"
wydr1 = wydr1 +1
elseif sheets("rejestr").cells(x,5) = "cośtam2"
zak = "jakastam2"
wydr2 = wydr2 +1
elseif sheets("rejestr").cells(x,5) = "cośtam3"
zak = "jakastam3"
wydr3 = wydr3 +1
end if
Sheets(zak").Cells(21,15)=Sheets("rejestr").Cells(x,21)
Sheets(zak).Cells(18,16)=Sheets("rejestr").Cells(x,22)
2. arkusz do którego zostały przeniesione dane z wiersza został wydrukowany (najlepiej jak dałoby się wybrać drukarkę, ponieważ narzędzie będzie działało na różnych komputerach z różnie nazwanymi drukarkami) i dopiero po tym zostanie wpisana dzisiejsza data (Sheets("rejestr").cells(x,12) = Date).
Wydruk na drukarkę domyślną:

sheets("jakaś").PrintOut Copies:=1, Collate:=True, _
IgnorePrintAreas:=False
3. zostanie to wrzucone do pętli po nadaniu powyższej daty.
nie rozumiem

4 Nie koniecznie, ale jeżeli ktoś potrafi, to czy trudno jest napisać kod, który na koniec wyświetli komunikat z ilością wydrukowanych arkuszy zas_1, zas_2 i zas_3.
Stwórz sobie zmienne która będzie przechowywała ilość wydruków i umieść w warunkach wydruku.
A na koniec msgbox "Wydruk1: " & wydr1 & " ,Wydruk2: " & wydr2 " ,Wydruk3 " & wydr3

Bardzo proszę o pomoc.

Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

ok, piękne dzięki za zainteresowanie tematem i pomoc :]

pkt 3. zostanie to wrzucone do pętli po nadaniu powyższej daty.

Chodzi mi o to, żeby po wydrukowaniu danego arkusza i nadaniu daty wydruku w wierszu z którego były pobierane dane (z "rejestr" do zas_1,...) program przechodził do kolejnego wiersza. rozumiem że powinienem zastosować while na początku i wend na końcu ??
Sławomir Broda

Sławomir Broda VBA, Excel, Access,
SAP i wszystko
związane z
automatyzac...

Temat: VBA kopiowanie wierszy z rejestru i druk 3 różnych arkuszy

Piotr T.:
ok, piękne dzięki za zainteresowanie tematem i pomoc :]

pkt 3. zostanie to wrzucone do pętli po nadaniu powyższej daty.

Chodzi mi o to, żeby po wydrukowaniu danego arkusza i nadaniu daty wydruku w wierszu z którego były pobierane dane (z "rejestr" do zas_1,...) program przechodził do kolejnego wiersza. rozumiem że powinienem zastosować while na początku i wend na końcu ??
Wszytko co napisałem musi być w pętli. Inaczej wykona się tylko raz.
Jeżeli chcesz coś w tym popisać to poszukaj podstaw.
Tworzenie warunków, pętli, procedur/funkcji z parametrami przyda Ci cię nie tylko w VBA.

Następna dyskusja:

VBA wyszukanie danych i kop...




Wyślij zaproszenie do