Drukowanie PDF na podstawie wyszukanej daty z bazy danych - jak zrobić?

Drukowanie PDF na podstawie wyszukanej daty z bazy danych - jak zrobić?
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Cześć,
od razu chcę poinformować, że jestem totalnie zielony ;)
tworzę plik w którym w Arkusz1 mam wzór raportu w którym w odpowiednich polach zmieniają się dane na podstawie wybranego dnia, a następnie drukowany do PDF. W Arkusz2 mam bazę danych na podstawie której wypełniany jest raport w Arkusz1. Każdy dzień w bazie to osobna kolumna. Takich raportów jest do zrobienia w tym przypadku 128 szt..

Do sedna...
Żeby ułatwić sobie pracę teraz i w przyszłości wymyśliłem zrobienie czegoś na wzór korespondencji seryjnej. Raport ma listę rozwijaną z datami z bazy co automatycznie zmienia dane w raporcie. Wszystko fajnie działa ale ręczne drukowanie PDF dla każdego dnia to katorga, więc próbuję to zautomatyzować.
Udało mi się na podstawie poradnika na YouTube stworzyć makro które przyciskiem generuje mi PDF z odpowiednią nazwą, udało się też stworzyć makro które generuje serię plików PDF z odpowiednimi nazwami ale działa ono jedynie pobierając nazwy z wierszy w jednej kolumnie transponowanej z Arkusz2 do Arkusz3. Ideałem byłoby makro działające tylko na Arkusz2 i pobierające nazwy z wielu kolumn.

Poniżej kod:

Kopiuj
Option Explicit

Sub Drukowanie()
Arkusz1.PrintOut Copies:=1
End Sub

Sub GenerowaniePDF()
Dim sciezka As String, nazwaPliku As String
sciezka = "C:\sciezka\do\pliku\"
nazwaPliku = Arkusz1.Range("H4").Value
Arkusz1.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=sciezka & "Raport_" & nazwaPliku & ".pdf"

End Sub
Sub GenerujWszystko()
Dim i As Long, ileK As Integer
Application.ScreenUpdating = False
ileK = Arkusz2.Range("A1").Value

For i = 1 To ileK
    Arkusz1.Range("H4").Value = Arkusz3.Range("A" & i + 1)
    Application.StatusBar = Arkusz3.Range("A" & i + 1)
    Call GenerowaniePDF
Next i
Application.ScreenUpdating = True
Application.StatusBar = ""
MsgBox "Raporty gotowe", vbInformation + vbOKOnly, "Komunikat"

End Sub

Sub GenerujWszystkoLadnie()

Dim i As Long, ileK As Integer
Application.ScreenUpdating = False
ileK = Arkusz2.Range("A1").Value

For i = 1 To ileK
    Arkusz1.Range("H4").Value = Arkusz2.Range("A" & i + 1)
    Application.StatusBar = Arkusz2.Range("A" & i + 1)
    Call GenerowaniePDF
Next i
Application.ScreenUpdating = True
Application.StatusBar = ""
MsgBox "Raporty gotowe", vbInformation + vbOKOnly, "Komunikat"

End Sub

Makro GenerujWszystko działa korzystając z Arkusz3, nie jestem w stanie wykombinować jak w makro GenerujWszystkoLadnie określić wyszukiwanie nazwy z wiersza 1 zaczynając od kolumny C kończąc na 128 kolumnie.

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 122
0

Cześć,
pogubiłem się między Arkuszem2 a Arkuszem 3, więc nie do końca wiem czy dobrze zrozumiałem, ale spróbujmy

Przetestuj kod poniżej.
W Arkusz1 w kolumnach od C (3) do G (7) mam jakieś wartości. Robię pętlę i wyświetlam w Msgbox. .

Kopiuj
For i = 3 To 7
MsgBox (Arkusz1.Cells.Cells(1, i).Value)
Next i

W Twoim przypadku 7 należałoby zamienić na 128

MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

główny problem jest w poniższej pętli:

Kopiuj
Sub GenerujWszystkoLadnie()

Dim i As Long, ileK As Integer
Application.ScreenUpdating = False
ileK = Arkusz2.Range("A1").Value

For i = 1 To ileK
    Arkusz1.Range("H4").Value = Arkusz2.Range("A" & i + 1)
    Application.StatusBar = Arkusz2.Range("A" & i + 1)
    Call GenerowaniePDF
Next i
Application.ScreenUpdating = True
Application.StatusBar = ""
MsgBox "Raporty gotowe", vbInformation + vbOKOnly, "Komunikat"

End Sub

chcę aby komórka H4 w Arkusz1 pobierała wartość z Arkusz2 z wiersza C1 do (w tym przypadku) 128 kolumny czyli DZ1

Kopiuj
Arkusz2.Range("A" & i + 1)

więc tak naprawdę chyba rozbija się składnię powyższej części.
Udało mi się tymczasowo obejść problem transponując C1:DZ1 do kolumny Arkusz3 w wierszach A1:A128.

TR
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 122
1
Kopiuj
chcę aby komórka H4 w Arkusz1 pobierała wartość z Arkusz2 z wiersza C1 do (w tym przypadku) 128 kolumny czyli DZ1

Arkusz2.Range("A" & i + 1)

Kopiuj
więc tak naprawdę chyba rozbija się składnię powyższej części.
Udało mi się tymczasowo obejść problem transponując C1:DZ1 do kolumny Arkusz3 w wierszach A1:A128.

sprawdź w takim razie to:

Kopiuj
Sub GenerujWszystkoLadnie()

Dim i As Long, ileK As Integer
Application.ScreenUpdating = False
ileK = Arkusz2.Range("A1").Value 'ta linijka tutaj teraz nie jest potrzebna

For i = 3 To 128
    Arkusz1.Range("H4").Value = Arkusz2.Cells.Cells(1, i)
    Application.StatusBar = Arkusz2.Cells.Cells(1, i)
    Call GenerowaniePDF
    'MsgBox (Arkusz2.Cells.Cells(1, i).Value)
Next i
Application.ScreenUpdating = True
Application.StatusBar = ""
MsgBox "Raporty gotowe", vbInformation + vbOKOnly, "Komunikat"

End Sub
MI
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 3
0

Działa! mega dzięki za pomoc 😀

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.