Hallo,
tja, was soll man sagen ... ohne die Datei zu kennen oder zu sehen, was Du siehst ist es schwierig, Dir zu helfen.
Du beziehst Dich bei Deinem Code sehr oft auf das aktive Blatt, hier sollte man, wenn möglich und bekannt, immer die Blätter konkret ansprechen. Z. B. beim Pdf_Druck. Ich gehe mal davon aus, dass das Blatt "Immo" gedruckt werden soll. Dann würde ich die Prozedur so schreiben:
Public Sub Pdf_Druck(Blatt As String)
Dim Dateiname As String
Dateiname = Sheets(Blatt).Range("H47") & Sheets(Blatt).Range("H49") & ".pdf"
Sheets(Blatt).Range("C1:BJ34").ExportAsFixedFormat Type:=xlTypePDF, Filename:=Dateiname, Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
End Sub
Der Aufruf erfolgt dann so:
Pdf_Druck BlattDruck
Im Prinzip solltest Du alle Bereiche, auf die Du zugreifst korrekt referenzieren.
Das hier:
'Und weiter geht es mit dem kopieren und einfügen
'Zeile im Blatt Liste markieren und kopieren
Sheets(BlattKrit).Cells(ZeileVerteilung, SpalteVerteiler).Select
Application.CutCopyMode = False
Selection.Copy
'Wechsel zum Blatt VERTEILUNG und einfügen
Sheets(BlattDruck).Cells(ZeileKrit, SpalteKrit).Select
ActiveSheet.PasteSpecial Paste:=xlPasteValues
könnte man auch kürzer und konkreter formulieren:
Sheets(BlattKrit).Cells(ZeileVerteilung, SpalteVerteiler).Copy
Sheets(BlattDruck).Cells(ZeileKrit, SpalteKrit).PasteSpecial Paste:=xlPasteValues
Da Du allerdings nur Werte kopierst, wäre es noch sinnvoller ohne Copy zu arbeiten:
Sheets(BlattDruck).Cells(ZeileKrit, SpalteKrit).Value = Sheets(BlattKrit).Cells(ZeileVerteilung, SpalteVerteiler).Value
Da brauchst Du auch nicht auf das andere Blatt wechseln ...
Zum Thema "letze Zeile" sei Dir diese Seite ans Herz gelegt:
https://www.excel-inside.de/vba-loesungen/zellen-a-bereiche/337-letzte-zeile-letzte-spalte-und-letzte-zelle-per-vba-ermitteln
Grüße
Michael
|