Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1136to1140
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Re: fortlaufende Nummerierung unterbinden
Sandra
Hallo zusammen,
vielleicht hat ja jemand eine Idee, warum dieses Makro bei mir nicht läuft:
Die aller erste Meldung die ich bei Versuch es auszuführen bekomme ist dies hier:
Userbild
Hier das Makro:
Public Sub PrintSheetsToPDF( _
ByVal SheetsToPrint As Variant, _
ByVal PDFFilePath As String _
)
' Print the specified sheets to a PDF file in the order specified. Requires
' Adobe Acrobat 7.0 and a reference to Acrobat Distiller.
' Syntax
' PrintSheetsToPDF(Sheets, PDFFilePath)
' SheetsToPrint - Array of sheet names to be printed. The sheets included are
'   sorted in that order and then printed in one print job. When the printing
'   is complete the original order is restored.
' PDFFilePath - Full path to the PDF file.
' Example
' Print sheets "Sheet4", "Sheet10", and "Sheet1" in that order:
'   PrintSheetsToPDF Array("Sheet4", "Sheet10", "Sheet1", "C:\Output.PDF")
Dim OriginalActiveWorksheet As Worksheet
Dim OriginalOrderNames As Variant
Dim Index As Long
Dim PDFDistillerApplication As PdfDistiller
Dim TempPFFilePathName As String
Dim PDFLogPathName As String
Dim Result As Long
' Normalize the sheet to print parameter
If Not IsArray(SheetsToPrint) Then SheetsToPrint = Array(SheetsToPrint)
For Index = LBound(SheetsToPrint) To UBound(SheetsToPrint)
If TypeName(SheetsToPrint(Index)) = "Worksheet" Then SheetsToPrint(Index) = SheetsToPrint( _
Index).Name
Next Index
' Normalize the output pdf file name
If LCase(Right(PDFFilePath, 4))  ".pdf" Then PDFFilePath = PDFFilePath & ".pdf"
' Save the current active worksheet
Set OriginalActiveWorksheet = ActiveSheet
' Save the current sheet order
ReDim OriginalOrderNames(1 To ThisWorkbook.Sheets.Count)
For Index = 1 To ThisWorkbook.Sheets.Count
OriginalOrderNames(Index) = ThisWorkbook.Sheets(Index).Name
Next Index
' Reorder the worksheets
For Index = UBound(SheetsToPrint) To LBound(SheetsToPrint) Step -1
If ThisWorkbook.Sheets(SheetsToPrint(Index)).Index > 1 Then
ThisWorkbook.Sheets(SheetsToPrint(Index)).Move Before:=ThisWorkbook.Sheets(1)
End If
Next Index
' Print the worksheets
TempPFFilePathName = Left(PDFFilePath, InStrRev(PDFFilePath, ".")) & "pf"
PDFLogPathName = Left(PDFFilePath, InStrRev(PDFFilePath, ".")) & "log"
On Error Resume Next
Kill TempPFFilePathName
On Error GoTo 0
ThisWorkbook.Worksheets(SheetsToPrint).PrintOut ActivePrinter:="Adobe PDF", PrintToFile:= _
True, Collate:=True, PrToFilename:=TempPFFilePathName
' Restore the original worksheet order
For Index = 1 To ThisWorkbook.Sheets.Count
If ThisWorkbook.Sheets(OriginalOrderNames(Index)).Index  Index Then
ThisWorkbook.Sheets(OriginalOrderNames(Index)).Move Before:=ThisWorkbook.Sheets(Index)
End If
Next Index
' Restore the original active worksheet
OriginalActiveWorksheet.Activate
' Convert the postscript file to .pdf
Set PDFDistillerApplication = New PdfDistiller
Result = PDFDistillerApplication.FileToPDF(TempPFFilePathName, PDFFilePath, "")
On Error Resume Next
Kill TempPFFilePathName
If Result = 1 Then Kill PDFLogPathName
End Sub
Ich denke es fehlt der Makroname. Wenn ich aber z. B. Sub PDF_Print_Sheet() in die erste Zeile Schreibe, dann erwarter er ein End Sub , da ja in der ursprünglich ersten Zeile schon ein Sub steht.
Wenn das behoben wird, kommt aber sicher die nächste Fehlermeldung, da das Makro nicht für mich gemacht wurde.
Hat jemand Lust, Zeit und etwas Geduld, mir dabei zu helfen?
@Rainer - DANKE für die tolle Hilfe. Das Du keine Lust mehr hast verstehe ich.
Bis später und liebe Grüß
Sandra
AW: Re: fortlaufende Nummerierung unterbinden
10.02.2010 16:50:21
Chris
Dieses Makro ist kein direkt ausführbares Makro. Du kannst es lediglich über ein weiteres Makro starten
Sub Blubb()
PrintSheetsToPDF(2, "C:\Test")
End Sub
wie willst du sonst die Variablen Sheet und PDFPath an das Makro übergeben?
AW: Re: fortlaufende Nummerierung unterbinden
10.02.2010 17:12:07
Sandra
Das funktioniert nicht: Fehler beim Komilieren. Syntaxfehler. Und diese Zeile ist dann gelb markiert:
PrintSheetsToPDF(2, "C:\Test")
Gruß
Sandra
AW: Re: fortlaufende Nummerierung unterbinden
10.02.2010 17:52:30
Chris
ja das liegt daran das ich den Code nicht richtig gelesen habe, aber in dem Code steht alles drin was du wissen musst, daher dachte ich das ich mich nicht verbessern muss, sondern dass du selbst drauf kommst, da wir beide das selbe VBA-Level haben.
PrintSheetsToPDF("Tabelle1","Tabelle2", "C:\Test")
Anzeige
Mach den Quatsch nicht noch "quätscher",...
10.02.2010 18:22:20
Luc:-?
...Chris,
lies meinen Beitrag, dann weißt du, wo dein Fehler liegt. Was du jetzt schreibst ist Unsinn...
1. ist der eigentl Fehler nicht beseitigt und...
2. ist jetzt ein richtig „falscher“ Fehler drin. Im HptPgm ist Param1 als Variant deklariert und es wird mit IsArray geprüft, ob er ein Datenfeld enthält. Ist das nicht der Fall, wird eines aus dem Einzelwert gemacht ...= Array(...).
Was du hier vorschlägst sind lauter Einzelparameter. Das ginge nur, wenn Param2 als Param1 stünde, Param1 dafür als Param2 ein ParamArray wäre. So wie du das machst, käme alles durcheinander! Wenn als Param1 mehrere Blätter angegeben wdn sollen, muss in der Rufprozedur ein Feld für Param1 vorgegeben wdn, also Array(1, 2, 3), nicht unbedingt Array("Tabelle1","Tabelle2", "C:\Test")...
Richtig wäre hier also...
1. Call PrintSheetsToPDF(2, "C:\Test") oder...
2. Call PrintSheetsToPDF("Tabelle2", "C:\Test") oder...
3. PrintSheetsToPDF 2, "C:\Test" oder...
4. PrintSheetsToPDF "Tabelle2", "C:\Test" oder...
5. Call PrintSheetsToPDF(Array(1, 2), "C:\Test") oder...
6. Call PrintSheetsToPDF(Array("Tabelle1", "Tabelle2"), "C:\Test") oder...
7. PrintSheetsToPDF Array(1, 2), "C:\Test" oder...
8. PrintSheetsToPDF Array("Tabelle1", "Tabelle2"), "C:\Test"
Gruß Luc :-?
Anzeige
Das ist auch kein Wunder, denn Chris hat...
10.02.2010 18:02:52
Luc:-?
...hier was verwechselt, Sandra...
Wenn PrintSheetsToPDF(2, "C:\Test") mit geklammerten Parametern geschrieben wird, gehört der Befehl Call an den Anfang, ansonsten (ohne Call) entfallen die Klammern und sind ggf durch Leerzeichen zu ersetzen.
Die HptRoutine selbst lässt alle sinnvollen Eingaben für Parameter_1 zu und wandelt die ggf in eine einheitl Form um; daran liegt's also nicht!
Gruß Luc :-?
AW: Re: fortlaufende Nummerierung unterbinden
10.02.2010 16:52:13
Luschi
Hallo Sandra,
das PDF-Druckmakro erwartet Parameter. Solche Makros werden im Makro-Vorschau-Fenster nicht angezeigt. Schreibe noch ein Makro:
Sub PDF_Drucken()
Call PrintSheetsToPDF Array("Sheet4", "Sheet10", "Sheet1", "C:\Output.PDF")
End Sub
Dieses Makro kann man aus dem Makro-Vorschau-Fenster (Alt+F8) dann starten.
Gruß von Luschi
aus klein-Paris
Anzeige
Das ist auch nicht ganz richtig,...
10.02.2010 18:26:24
Luc:-?
...Luschi,
denn der 2.Parameter, der Dateipfad, gehört nicht mehr zum Blattnamensfeld! Die Schlussklammer von Array muss davor stehen!
Gruß Luc :-?
Jetzt verstehe ich gar nichts mehr?!?!
11.02.2010 08:18:59
Sandra
Hallo zusammen,
ich bin begeistert über Eure Hilfe, aber ich verstehe nur Bahnhof. Vielleicht hätte ich mein VBA-Level nicht auf "bescheiden" setzen sollen.
Welchen Code soll ich nun nehmen und soll ich den in ein Extra Modul einpflegen oder direkt vor den Code den ich gepostet habe?
So schwierig wie heute fand ich die VBA-Programmierung noch nie.
Gruß
Sandra
AW: Jetzt verstehe ich gar nichts mehr?!?!
11.02.2010 10:21:44
Luschi
Hallo Sandara,
das Startmakro muß so aussehen:
Sub PDF_Drucken()
Call PrintSheetsToPDF(Array("Sheet4", "Sheet10", "Sheet1"), "C:\Output.PDF")
End Sub
Gruß von Luschi
aus klein-Paris
Anzeige
AW: Jetzt verstehe ich gar nichts mehr?!?!
11.02.2010 10:32:17
Sandra
Hallo Luschi,
das funktioniert schon mal. :-)
Wie aber vorausgeahnt, läuft das Ursprungsmakro noch nicht.
Hier mein nächstes Problem:
Userbild
Weißt Du auch da Rat?
Lieben Gruß aus Hamburg
Sandra
AW: Jetzt verstehe ich gar nichts mehr?!?!
11.02.2010 13:23:37
Luschi
Hallo Sandra,
in Deinem Vba-Code steht folgender Kommentar:
'Requires Adobe Acrobat 7.0 and a reference to Acrobat Distiller.
Du mußt also im Vba-Editor über Extras-Verweise... ein Häckchen setzen bei diesem Objekt. Da bei mir der Acrobat-Distiller nicht intstallier ist, kann ich dir die genaue Bezeichnung des Objektes nicht nennen.
Ohne diesen Verweis kann Excel-Vba mit dem Objekt 'PdfDistiller' nichts anfangen.
Gruß von Luschi
aus klein-Paris
Anzeige
pdfDistiller?
11.02.2010 13:35:58
Sandra
Hallo Luschi,
vielleicht ist das jetzt eine dumme Frage, aber was bitte ist der pdfdistiller?
Gruß Sandra
Das dürfte das Pgm sein, das die .pdf erzeugt,...
11.02.2010 14:59:20
Luc:-?
...Sandra;
das hat natürlich auch eine Bibliothek, auf die du in deinem VBProjekt einen Verweis setzen sollst. Wie genau das DropDown-Menü von Verweis setzen unter VBE-Extras das bezeichnet, wissen wir nicht, weil wir das Pgm nicht haben. Musst du also selber rausfinden (ähnl Bezeichnungen etc). Es kann natürlich auch sein, dass es gar nicht angezeigt wird, dann musst du deine Verzeichnisse durchsuchen! Immer vorausgesetzt, du bist im Besitz dieses Pgms, sonst kannst du wohl das alles hier vergessen...
Tipp: Das Pgm dürfte üblicherweise als Drucker angemeldet sein.
Gruß Luc :-?
PS: Nur zum besseren Verständnis - Luschis Vorschlag entspricht meiner Variante 6!
Anzeige
Kästchen fürs Häkchen gefunden
11.02.2010 15:06:19
Sandra
Hallo zusammen,
es wird nicht besser. Nachdem ich nun endlich auf die Idee gekommen bin das Makro zu stoppen, konnte ich nun endlich auch "Verweise" anklicken. Dort konnte ich auch tatsächlich einen Haken in das Kästchen PDF-Distiller setzten.
ABER...
Wieder ein neues Problem. :-(
Userbild
Ich hoffe Ihr habt noch etwas Geduld mit mir!
Liebe Grüße
Sandra
Ich kann zwar auf deinem Bild nicht sehen,...
11.02.2010 15:35:38
Luc:-?
...wo das Pgm hängen bleibt (gelbe Markierung!), Sandra,
vermute aber, es könnte an der Parameterübergabe liegen. Heißen deine Blätter wirklich Sheet4 usw? Du kannst statt der Namen auch die lfdNr der Blätter, die gedruckt wdn sollen, angeben (meine Variante 5) oder eben die tatsächlichen Namen bzw eigentlich Titel (das, was auf den Fußreitern steht). Du hast jetzt wohl einfach nur das übernommen, was Luschi schrieb. Aber das war nur ein Beispiel, das er dem Pgm-Kommentar entnommen hatte!
Gruß Luc :-?
Anzeige
AW: Ich kann zwar auf deinem Bild nicht sehen,...
11.02.2010 15:51:36
Sandra
Achso!!!
Ne, meine Tabellenblätter heißen nicht so. Aber eigentlich sollen auch nicht immer bestimmte - oder gar alle gedruckt werden. Ich meine - ich kann Sie nicht festlegen. Es sollen immer die markierten gedruckt werden.
Aber da weiß ich dann auch schon wieder nicht weiter. :-(
Bestimmt irgendwas mit:
ActiveWindow.SelectedSheets
Es soll auch nicht auf C: gespeichert werden. Sondern jeweils (egal welcher Nutzer) auif dem Desktop. Dann muss es doch soetwas in der Art sein, oder?:
Environ("userprofile") & "\Desktop\" & .Name & ".pdf"
Aber - da ich die Dateien nicht mehr einzelnd haben möchte, kann der Dateiname ja nicht gleich der Name des Tabellenblattes sein. Kann man da auch eine Nachfrage einbauen, wie das Dokument genannt werden soll?
Gruß
Sandra
P. s. Es gab leider keine gelbe Markierung - ich habe sie jedenfalls nicht gesehen. :-(
Anzeige
...Macht nix, denn das wird's gewesen sein,...
11.02.2010 17:05:34
Luc:-?
...Sandra!
Vorschlag: Nichts am HptPgm ändern, das ist recht optimal, aber dafür in der Rufprozedur!
Ansonsten hast du recht, zumindest mit dem 1.Parameter, deshalb vor HptPgm-Aufruf wie _ folgt einfügen...

Dim sh As Worksheet, shn As String, sdp As String, sha As Variant
sdp = Environ("userprofile") & "\Desktop\" & .Name & ".pdf"    'unter Vorbehalt!
For Each sh In ActiveWindow.SelectedSheets
shn = shn & Chr(10) & .Name
Next sh
MsgBox Mid(shn, 2)    'nur zum Test, kann später raus!
sha = Split(Mid(shn, 2), Chr(10))
Der eigentl HptPgm-Aufruf muss dann natürlich als Parameter die Namen der so erzeugten Variablen enthalten ⇒ ...(sha, sdp)
Gruß Luc :-?
PS: Könnte sein, dass beim Pfad noch nicht alles ok ist, konnte ich jetzt nicht checken!
Anzeige
Ich glaub ich bin zu dumm für VBA... :-(
12.02.2010 08:46:30
Sandra
Guten Morgen Luc,
jetzt habe ich wieder das 1. Problem:
Userbild
oder sollte ich das so machen?
Userbild
Userbild
dieser Teil - .name hat einen anderen Ursprung. In dem Code, in dem dieser Teil:
Environ("userprofile") & "\Desktop\" & .Name & ".pdf"
eingefügt ist, gibt es ja vorher den Teil, in dem festgelegt wird, das jedes Tabellenblatt als pdf auf dem Desktop gespeichert wird und den Namen des Tabellenblattes bekommt - mit Prüfung, ob diese Datei ggfs. schon vorhanden ist.
Im Ganzen sieht der Code dann so aus:
Sub PDF_Print_Sheet()
'Modifiziert
Dim wks As Worksheet
For Each wks In ActiveWindow.SelectedSheets
With wks
.Select
If Dir(Environ("userprofile") & "\Desktop\" & .Name & ".pdf")  "" Then
Qe = MsgBox("Die Datei: " & .Name & ".pdf" & vbLf & "ist bereits vorhanden. _
" & vbLf & "Soll diese Datei ersetzt werden ?", vbQuestion + vbYesNo, "SANDRA WARNT: ACHTUNG!!")
If Qe = vbNo Then Exit Sub
End If
.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
Environ("userprofile") & "\Desktop\" & .Name & ".pdf", Quality:=xlQualityStandard, _
_
_
_
_
IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
True
End With
Next wks
End Sub
Da fällt mir ein - den muss ich auch noch ergänzen. Das wird gleich der nächste Tread im Forum.
Zurück zum Ursprungsthema.
Muss dann nicht statt .name eine Nachfrage nach dem Dateinamen eingebaut werden - ggfs. gleich mit Prüfung ob diese Datei schon existiert? So in der Art:
Sub Makro1()
Dim oWB As Workbook
Dim oSh As Worksheet
Dim objShell As Object
Dim Desktop As String
Dim strPDF_Name As String
strPDF_Name = InputBox("Geben sie den Namen der Pdf Datei an", "Name vergeben")
If strPDF_Name = "" Then Exit Sub
strPDF_Name = IIf(Right$(LCase(strPDF_Name), 4) = ".pdf", strPDF_Name, strPDF_Name & ".pdf")
Set objShell = CreateObject("WScript.Shell")
Desktop = objShell.SpecialFolders("Desktop")
Desktop = IIf(Right$(Desktop, 1) = "\", Desktop, Desktop & "\")
If Dir(Desktop & strPDF_Name)  "" Then
If MsgBox("Datei mit den Namen " & strPDF_Name & " schon vorhanden!" & vbCr & _
"Wollen Sie diese ersetzen?", vbYesNo) = vbNo Then
Exit Sub

Deshalb hatte ich auch "unter Vorbehalt"...
12.02.2010 12:58:21
Luc:-?
...kommentiert, Sandra,
denn du musst wissen, worauf sich das bezieht und das Fehlende dann vor Pkt ergänzen. Und natürlich gehören die Codezeilen in die Rufprozedur für das Druckpgm! Hatte ich das nicht geschrieben...?
Soweit erstmal...
Gruß Luc :-?
AW: Deshalb hatte ich auch "unter Vorbehalt"...
12.02.2010 14:00:34
Sandra
Hallo Luc,
die geschichte mit .Name...
Wenn ich aus .Name "Name" mache, dann sage ich Ihm ja, dass er die Datei Name nennen soll, oder?
Eigentlich müsste da eine Abfrage rein. Soetwas in der Art:
strPDF_Name = InputBox("Geben Sie den Namen ein, unter dem das Dokument gespeichert werden soll.", "Bitte Dateiname vergeben")
Aber es geht auch nicht mit "Name". Die MsgBox gibt mir Name aus und ich bekomme auch keine Fehlermeldung, aber eine Datei tauch nirgends auf. :-(
Was mache ich denn falsch?
Liebe Grüße
Sandra
Muss ich mir erst mal genauer ansehen! owT
12.02.2010 17:15:06
Luc:-?
:-?
Hier geht's wohl weiter und...
15.02.2010 23:05:24
Luc:-?
...zuende...
Luc :-?
...Und hier noch der...
15.02.2010 23:08:35
Luc:-?
...Archiv-Link.
:-?
Andere Thematik - anderes Problem...
16.02.2010 10:50:24
Sandra
Hallo Luc.
Dieser Code in dem anderen Thread bezieht sich auf eine andere Thematik.
Dort werden alle aktiven Tabellenblätter in je eine pdf-Datei umgewandelt. Dabei heißt jede Datei genauso, wie das Tabellenblatt. Die Datei wird auch automatisch auf dem Desktop abgelegt.
Hier ging es um die Ergänzende Prüfung, ob die Datei ggfs. Vorhanden ist und wenn ja, ob diese ersetzt werden soll oder nicht. Außerdem sollte die Aufforderung nach der Eingabe des Dateinamen ergänzt werden, für den Fall, dass man die vorhandene Datei nicht überschreiben möchte.
Der Code läuft super - gar keine Frage, aber ich benötige dringend einen Code, mit dem ich aktive Tabellenblätter (egal wie viele) in einer Gesamt-pdf-Datei bekomme, ohne das dabei die Seiten fortlaufend nummeriert werden.
Wie gesagt, ich benötige im Gesamtpaket genau die gleiche Nummerierung, als wenn ich aus allen Tabellenblättern einzelne Dokumente mache und sie dann zusammen füge. Das würde ich auch machen, aber bei 45 Tabellenblättern und mehr ist das echt schwierig.
Ich hatte diese Thematik hier schon einmal angesprochen und Ramses hatte mich dann auf einen Link verwiesen, woher ich dann auch den Code habe, der derzeit bei mir noch nicht läuft.
Leider bin ich nach wie vor nicht weiter gekommen.
Gruß
Sandra

302 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige