Temat: Generowanie pliku pdf

Witam. Mam problem z generowaniem plików pdf za pomocą makra. Używam następującego makra:

Sub odczytowapdf()

Sheets("Dane osobowe").Range("N4") = 23 'wskazuje na pierwszego ze stu klientów
Dim I As Byte ' licznik



For I = 1 To 100


If (Sheets("Dane osobowe").Range("Q14") = 1) Then 'jeżeli jest jedynką znaczy, że klient płaci VAT i generować fakturę VAT

Sheets("Faktura odczyty VAT").Select ' aktywuje formularz faktury VAT

If (Sheets("Faktura odczyty VAT").Range("J33") > 0) Then ' tu sprawdza czy faktura ma wartośc większą od zera, nie generujemy zerowych faktur

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & I, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'w powyższej linii exportujemy fakturę do pliku pdf, do lokalizacji gdzie znajduje się arkusz o nazwie numeru w liczniku I
End If

End If

If (Sheets("Dane osobowe").Range("Q14") = 0) Then 'jeżeli jest zerem znaczy, że klient nie płaci VAT i generować rachunek

Sheets("Faktura odczyty").Select

If (Sheets("Faktura odczyty").Range("J33") > 0) Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=ThisWorkbook.Path & "\" & I, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If

End If

Sheets("Dane osobowe").Range("N4") = Sheets("Dane osobowe").Range("N4") + 1 ' zwiększenie o jeden aby przejśc do następnego klienta

Next

Sheets("Dane osobowe").Select ' po przejrzeniu wszystkich klientów uaktywniamy arkusz dane osobowe

End Sub


Problem polega na tym, e jeżeli uruchomię to makro za pierwszym razem gdy nie ma jeszcze plików pdf przez nie tworzonych to po każdym zapisie pliku pdf wyrzuca błąd
Run-time error '1004':
Nie zapisano dokumentu. Być może jest on otwarty lub przy zapisywaniu napotkano błąd. Gdy natomiast uruchomię je tyle razy ile ma ono wygenerować plików i te pliki się utworzą, wówczas nie ma problemu. Nadpisuje już utworzone pliki i nie ma błędu. Próbowałem opóźniać działanie pętli - bezskutecznie. Może pomogłoby tworzenie pliku pdf przed funkcją ActiveSheet.ExportAsFixedFormat. Proszę o jakieś rady, pozdrawiam.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Generowanie pliku pdf

Nie chodzi o obecność PDFów.
ThisWorkbook.Path
nie zwraca ścieżki jeśli plik nie zostanie zapisany lub otwarty w trybie z ograniczeniami.

Wprowadź zmienną przed pętlą:
Dim sciezka$: sciezka = ThisWorkbook.Path
If sciezka = "" Then sciezka = "c:\Twoja_Sciezka\"

zamień linijkę w pętli
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=sciezka & I, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=True, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False


p.s.
Po co tak selekcisz?
Sprawdź co daje deklaracja zmiennej obiektowej Worksheet

Dodatku do Office www.VBATools.pl

Temat: Generowanie pliku pdf

Dziękuje za odpowiedź. Powalczę z tym jutro. Dam znać. Przyznaje sklekce bo życie zmusiło mnie w tym miesiącu do używania VB i się uczę. Pozdrawiam.

Temat: Generowanie pliku pdf

Witam. Zmieniłem moje makro i niestety efekt jest identyczny jak przed zmianą. Zmieniłem w taki sposób:

Sub odczytowapdf()

Sheets("Dane osobowe").Range("N4") = 23 'wskazuje na pierwszego ze stu klientów
Dim I As Byte ' licznik


Dim sciezka$: sciezka = ThisWorkbook.Path
If sciezka = "" Then sciezka = "C:\Users\1\Desktop\Błąd"

For I = 1 To 100

If (Sheets("Dane osobowe").Range("Q14") = 1) Then 'jeżeli jest jedynką znaczy, że klient płaci VAT i generować fakturę VAT

Sheets("Faktura odczyty VAT").Select ' aktywuje formularz faktury VAT

If (Sheets("Faktura odczyty VAT").Range("J33") > 0) Then ' tu sprawdza czy faktura ma wartośc większą od zera, nie generujemy zerowych faktur

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sciezka & I, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
'w powyższej linii exportujemy fakturę do pliku pdf, do lokalizacji gdzie znajduje się arkusz o nazwie numeru w liczniku I
End If

End If

If (Sheets("Dane osobowe").Range("Q14") = 0) Then 'jeżeli jest zerem znaczy, że klient nie płaci VAT i generować rachunek

Sheets("Faktura odczyty").Select

If (Sheets("Faktura odczyty").Range("J33") > 0) Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sciezka & I, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End If

End If

Sheets("Dane osobowe").Range("N4") = Sheets("Dane osobowe").Range("N4") + 1 ' zwiększenie o jeden aby przejśc do następnego klienta

Next

Sheets("Dane osobowe").Select ' po przejrzeniu wszystkich klientów uaktywniamy arkusz dane osobowe

End Sub


Pozostaje tylko powiedzieć help me :) Pozdrawiam.
Marzanna Szulta

Marzanna Szulta właściciel, Usługi
Informatyczne
SZULTASET

Temat: Generowanie pliku pdf

Oskar nie bez powodu pisał o tych Selectach, a mogą tu one mieć kluczowe znaczenie. Fragment kodu:
Sheets("Faktura odczyty VAT").Select   ' aktywuje formularz faktury VAT

wcale nie aktywuje tego arkusza, a jedynie go zaznacza. Biorąc pod uwagę, że dalej odwołujesz się do aktywnego arkusza - możesz odwoływać się do zupełnie innego niż Ci się wydaje. Jeżeli chcesz aktywować arkusz, zastosuj kod:
Sheets("Faktura odczyty VAT").Activate

Temat: Generowanie pliku pdf

Witam. Dziękuję za podpowiedź ale niestety efekt jest identyczny. Cały czas sytuacja jest taka sama. Myślę, czytam patrzę, kombinuje i nic. Jedyny moment, gzie makro się nie wiesza to taki kiedy są już stworzone pliki pdf. Pozdrawiam.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Generowanie pliku pdf

Daniel,
Widzę ze twoja ścieżka nie ma znaku "\" na końcu - popraw to i sprawdź.

Jeśli dalej byłby kłopot z tą instrukcją to:
ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
Filename:=sciezka & I, _
Quality:=xlQualityStandard, _
IncludeDocProperties:=False, _
IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Zmieńmy zatem jeden parametr w wywołaniu - może Word ci bruździ.

p.s.
Przyzwyczaj się aby ZAWSZE w pętlach ożywać deklaracji Long.
Zobacz jakie ograniczenie ma twoja deklaracja. Nie wykluczone że sprawdza się ona na małych liczbach ale popełnisz podobny błąd i nie będziesz wiedział co jest nie tak, a na pamięci nie zaoszczędzisz ją stosując.Ten post został edytowany przez Autora dnia 10.03.15 o godzinie 09:45

Temat: Generowanie pliku pdf

Zrobiłem zgodnie z Twoimi uwagami, najpierw poprawiłem ścieżkę, potem poprawiłem parametr na False i dalej mam ten sam problem. Sprawdzałem na innym komputerze i jest to samo. Napisałem sobie też makro, bez pętli do generowania 10 takich samych pdf-ów i dalej mam ten sam problem. Wrzucę kody obu makr, tak dla wglądu, może uda się coś znaleźć.

Generujące 10 takich samych faktur o nazwach od 1 do 10
  
Sub pojedyncza()

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\1.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\2.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\3.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\4.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\5.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\6.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\7.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\8.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\9.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

Sheets("Faktura odczyty VAT").ExportAsFixedFormat Type:=xlTypePDF, Filename:="c:\pdf\10.pdf", _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False

End Sub


Moje nieszczęsne makro na generowanie faktur w pętli


Sub odczytowapdf()

Sheets("Dane osobowe").Range("N4") = 25 'wskazuje na pierwszego ze stu klientów
Dim i As Byte ' licznik


Dim sciezka$: sciezka = ThisWorkbook.Path
If sciezka = "" Then sciezka = "C:\Users\1\Desktop\Błąd\"

For i = 1 To 100

If (Sheets("Dane osobowe").Range("Q14") = 1) Then 'jeżeli jest jedynką znaczy, że klient płaci VAT i generować fakturę VAT

Sheets("Faktura odczyty VAT").Activate ' aktywuje formularz faktury VAT

If (Sheets("Faktura odczyty VAT").Range("J33") > 0) Then ' tu sprawdza czy faktura ma wartośc większą od zera, nie generujemy zerowych faktur

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sciezka & i, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
'w powyższej linii exportujemy fakturę do pliku pdf, do lokalizacji gdzie znajduje się arkusz o nazwie numeru w liczniku I
End If

End If

If (Sheets("Dane osobowe").Range("Q14") = 0) Then 'jeżeli jest zerem znaczy, że klient nie płaci VAT i generować rachunek

Sheets("Faktura odczyty").Activate

If (Sheets("Faktura odczyty").Range("J33") > 0) Then

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:=sciezka & i, _
Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
End If

End If
Sheets("Dane osobowe").Range("N4") = Sheets("Dane osobowe").Range("N4") + 1 ' zwiększenie o jeden aby przejśc do następnego klienta

Next

End Sub

Dziękuję za cierpliwość i pozdrawiam.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Generowanie pliku pdf

>> Napisałem sobie też makro, bez pętli do generowania 10 takich samych pdf-ów i dalej mam ten sam problem

Może masz uwalony sterownik (jaka wersja Acrobata do przeinstalowania)?
W poleceniu nie ma wiele parametrów. Skoro nie działa prosta linijka "zapisz jako PDF" to znaczy ze to błąd programowy (a nie instrukcji podanej kodem).

nie chce ci nic narzucać ale może całkiem inny sterownik do PDFów.
U mnie w robocie sterowniki MS źle gadają z Postscriptami niektórych drukarek (inny problem) i zamiast wydruku wychodzą krzaki. Panaceum na to jest takie rozwiązanie.

Temat: Generowanie pliku pdf

Nie miałem Acrobata tylko jakiegoś Foxit reader czy coś. Wywaliłem instaluje najnowszego Acrobata i zobaczymy. Czy może zainstalować jakąś starszą wersję? Pozdrawiam.
Oskar Shon

Oskar Shon Dodatki do Office
www.VBATools.pl

Temat: Generowanie pliku pdf

Nowa, polska wersja jest ok.
Generalnie, możesz jeszcze użyć uruchomienia bez dodatków. Może któryś z nich być przyczyną takiego stanu.
Uruchom Excela przytrzymując klawisz [Ctrl] i wyraź zgodę na uruchomienie w trybie awaryjnym.
Ewa Stawowa-Barbudis

Ewa Stawowa-Barbudis Doradca Techniczny -
Przedstawiciel
Handlowy, MAT Usługi
...

Temat: Generowanie pliku pdf

Trzeba sprawdzić na pojedynczym pliku, czy bez makra jest możliwy zapis do pliku pdf.
Bez tego na nic zda się poprawianie kodu.

Jeżeli na pojedynczym pliku nie da się zapisać do pdfa, to w samym pliku jest "coś" co to uniemożliwia.
U mnie czasami psuje plik wklejanie tekstu. Trzeba sprawdzić zawartość komórek.

Rozwiązanie:
Cały tekst z pliku przekleić należy do nowego pliku z translacją na zwykły tekst - jeżeli tekst, zwykłe liczby - jeżeli liczby itd.
Translacji zawartości komórki tekstowej można dokonać używając Worda.

Takie wyczyszczenie zawartości komórek u mnie zawsze pomaga :)

Spotkałam się na forach również z opinią, że jest to kwestia Kasperskiego...



Wyślij zaproszenie do