Mehrere Blätter in separate PDFs drucken
#11
Hallo @schauan,

vielen Dank für Deine Ausführungen bezüglich der richtigen Zuweisung von Variabeln zu einem Datentyp. Bin eben auch noch Anfänger bei VBA und freue mich natürlich, wenn sich jemand die Mühe macht mir etwas zu erklären. - Sehe ich das dann richtig, dass bei meiner offensichtlich falschen Zusweisung der Variablen zum Datentyp Long das j und das k als Variant eingestuft würden, das i jedoch als Long?
In welchem Falle würde es zu Problemen kommen, wenn die Typen so wie in meinem Beispiel nicht korrekt zugeordnet würden? Bei meinem Testlauf in der Probedatei hat gab es für micht keine sichtbaren Probleme.

Bin für jede weiterführende Information dazu aufgeschlossen.

Grüße

Norbert
Antworten Top
#12
Hallo Norbert,

also, Variablen zu bestimmten Typen zuzuweisen ist erst mal - man steinige mich nicht dafür - meist scheinbar nicht erforderlich. Man nehme Variant - und wenn's nicht passt, wird einem das Excel schon irgendwie mitteilen.

Aber - VBA ist da eine unrühmliche Ausnahme m Reigen der Programmiersprachen. Bei anderen musst Du in der Regel Typen korrekt zuweisen.
Auch bei VBA gibt es einige Fälle, wo Du daran nicht vorbei kommst, z.B. wenn Du Ereignismakros verwendest, bei Objekten (As Object wäre ziemlich allgemein, As Range oder was auch immer dann konkret), wenn Du auf API's zugreifst, wenn Du Variablen zwischen Routinen übergibst, ggf. bei Arrays usw ...

Eine korrekte Zuweisung hat auch weitere Vorteile. Für mich wohl der wichtigste ist, Fehler werden bereits bei der Zuweisung von Inhalten erkannt und nicht erst irgendwann später bei der Verarbeitung. Ein anderer ist z.B. der Speicherbedarf - ist heutzutage weniger relevant, aber wenn Du größere Projekte mit einer Vielzahl Variablen hast, dann vielleicht schon.

Auch die Bezeichnung der Variablen sollte schon etwas erklärend sein. Die Buchstaben i, j und k hatte ich ja nicht angemosert, nur die Länge.
Schleifenzähler vom Typ Long könnte man z.B. mit loCnt01, loCnt02 usw. benennen statt iCnt, jCnt usw.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#13
Hallo André,

danke und Grüße

Norbert
Antworten Top
#14
(10.10.2022, 09:23)Case schrieb: Hallo, 19 

eigentlich solltest du eine Beispielmappe (natürlich anonymisiert) hochladen. 21

Es kommt halt auf den Aufbau drauf an. Da kann man das schnell einbauen. Dodgy

Wieder zu schnelle gelesen. man sollte doch nur eine Sache gleichzeitig machen.  19 20

Mache ich fertig und lade es hoch.

(08.10.2022, 08:01)Kl@us-M. schrieb: Hallo Matthias,

schau mal, ob dir das hilft:

http://www.kmbuss.de/Excel-CD/xls2pdf.htm

Gestern getestet. Auf dem Firmenrechner konnte ich es nichtmal downloaden. (Bin aber auch nicht Admin)

Und auf dem privaten konnte ich es nicht in Excel laden. Scheint für eine ältere Version zu sein.
Antworten Top
#15
Hallöchen,

der pdf24-Creator ist zur Installation auf dem Rechner und dazu braucht man Admin-Rechte. Zu Hause sollte es also gehen. Dad Tool steht dann als "Drucker" mit einigen weiteren Funktionen zur Verfügung.

Auf Arbeit wärst Du mit Case's Ansatz wohl besser dran.
.      \\\|///      Hoffe, geholfen zu haben.
       ( ô ô )      Grüße, André aus G in T  
  ooO-(_)-Ooo    (Excel 97-2019+365)
Antworten Top
#16
(11.10.2022, 13:24)schauan schrieb: Hallöchen,

der pdf24-Creator ist zur Installation auf dem Rechner und dazu braucht man Admin-Rechte. Zu Hause sollte es also gehen. Dad Tool steht dann als "Drucker" mit einigen weiteren Funktionen zur Verfügung.

Auf Arbeit wärst Du mit Case's Ansatz wohl besser dran.

Den PDF Creator habe ich schon. 
Aber das Add In von der Seite geht halt nicht.

(10.10.2022, 09:23)Case schrieb: Hallo, 19 

eigentlich solltest du eine Beispielmappe (natürlich anonymisiert) hochladen. 21

Es kommt halt auf den Aufbau drauf an. Da kann man das schnell einbauen. Dodgy

So, jetzt nochmal.  19

Anbei die Datei. Jeder Abschnitt soll halt in eine extra Datei, die ich dann verschicken kann.


Angehängte Dateien
.xlsx   Testtabelle2.xlsx (Größe: 11,84 KB / Downloads: 1)
Antworten Top
#17
Hallo, 19 

habe für die Bereiche "Namen" vergeben (Formeln - Namens-Manager). 21
[attachment=45338]

Code:
Option Explicit
' Speichert auf dem Desktop des Users
Public Sub Main_1()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("UserProfile") & "\Desktop\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert im TEMP-Ordner des jeweiligen Users (C:\Users\BENUTZERNAME\AppData\Local\Temp\)
Public Sub Main_2()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("TEMP") & "\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert in einem vorgegebenen Ordner - hier C:\TMP\
Public Sub Main_3()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, "C:\TMP\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
[-] Folgende(r) 1 Nutzer sagt Danke an Gast für diesen Beitrag:
  • Excelmachtspass
Antworten Top
#18
(12.10.2022, 03:50)Case schrieb: Hallo, 19 

habe für die Bereiche "Namen" vergeben (Formeln - Namens-Manager). 21


Code:
Option Explicit
' Speichert auf dem Desktop des Users
Public Sub Main_1()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("UserProfile") & "\Desktop\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert im TEMP-Ordner des jeweiligen Users (C:\Users\BENUTZERNAME\AppData\Local\Temp\)
Public Sub Main_2()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("TEMP") & "\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert in einem vorgegebenen Ordner - hier C:\TMP\
Public Sub Main_3()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, "C:\TMP\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub

Hallo Case,
danke schon einmal.  19

Schau ich mir die Tage mal an. Gerade noch was anderes reinbekommen. 

Melde mich dann hier nochmal. 

Dann noch eine schöne Woche.  21 21 21
Antworten Top
#19
(12.10.2022, 03:50)Case schrieb: Hallo, 19 

habe für die Bereiche "Namen" vergeben (Formeln - Namens-Manager). 21


Code:
Option Explicit
' Speichert auf dem Desktop des Users
Public Sub Main_1()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("UserProfile") & "\Desktop\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert im TEMP-Ordner des jeweiligen Users (C:\Users\BENUTZERNAME\AppData\Local\Temp\)
Public Sub Main_2()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, Environ("TEMP") & "\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub
' Speichert in einem vorgegebenen Ordner - hier C:\TMP\
Public Sub Main_3()
    Dim lngTMP As Long
    For lngTMP = 1 To Application.Names.Count
        Range(Application.Names(lngTMP).Name).ExportAsFixedFormat 0, "C:\TMP\" & Application.Names(lngTMP).Name & Format(Now, "_DD_MM_YYYY_hh_mm_ss")
    Next lngTMP
    Tabelle1.DisplayAutomaticPageBreaks = False
End Sub

Code 2 hat geklappt. Funktioniert. Danke. 
Hab nur keinen Plan, warum das funktioniert.  19
Bei Code 1 und 3, wo auf Desktop und Temp Ordner gespeichert werden soll, kommt eine Fehlermeldung.
"Das Dokument wurde nicht gespeichert. Es ist möglicherweise geöffnet oder...."



Habe jetzt folgendes gemacht.

Habe jetzt erstmal zwei Makros erstellt.
Das eine erstellt Registerkarten mit dem Namen der Standorte.
Das zweite kopiert die jeweiligen Daten in die Registerkarte. Habe eine Range angeben die kopiert wird. Einmal für die Legende vor und dann für die Daten weiter hinten.
So passt das schon einmal sehr gut. So habe ich einen Überblick über die einzelnen Standorte.
Danke ans Forum. 

Der letzte Schritt ist dieser Code.
Der geht mal und geht mal nicht.  Undecided

Code:
Sub RegisterSpeichern()

    Dim wkb As Workbook
    Dim wks As Worksheet
   
    Application.ScreenUpdating = False
    Application.DisplayAlerts = False
   
    With ThisWorkbook
        For Each wks In .Worksheets
            wks.Copy
            Set wkb = ActiveWorkbook
            wkb.SaveAs wks.Name & ".xlsx", xlOpenXMLWorkbook
            wkb.Close False
            Set wkb = Nothing
        Next
        Set wks = Nothing
    End With
   
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
   
End Sub

Er speichert die jeweiligen Registerkarten im Ordner Dokumente. 
Kann ich dieses Ziel auch ändern?

Und der Code funktioniert nicht immer. 
Mal speichert er alle Registerkarten ab und beendet es dann mit Fehler 1004 
Dann speichert er nur Tabelle1 als neue Excel ab und beendet dann mit 1004.
Oder er läuft komplett durch und alle Dateien sind da. 

"Laufzeitfehler 1004. Die Methode "SaveAs" für das "_Workbook" ist fehlgeschlagen."


Also entweder sollte ein Code doch funktioniere oder halt nicht?  20 20 

Sonnige Grüße.
Antworten Top
#20
Moin,

wenn du immer wieder die Workbooks schließt, bleibt für Excel irgendwann kein Objekt mehr übrig, auf das .SaveAs angewendet werden könnte.

Viele Grüße
derHöpp
Antworten Top


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste