Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1824to1828
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
Inhaltsverzeichnis

3 Probleme

3 Probleme
26.04.2021 16:56:29
Eisi
Hallo zusammen,
ich dachte jetzt läuft alles, aber leider hakt es noch an folgenden Punkten:
1. Der Druckbereich besteht aus 1 - 19 Seiten ab B3:I und letzte Zeile. So wie ich den Code verstehe, wird auch nur dieser Bereich kopiert.
Das macht er aber nicht, wenn in der Spalte A etwas steht. Somit werden mir alle 19 Seiten als PDF gedruckt und in Excel kopiert, weil in Spalte A immer die
Seitenzahl steht. Warum ist das so?
2. Im Druckbereich steht Text usw., aber auch Bilder aus Hardcopy. Die Bilder werden in der PDF angezeigt, aber in der Excelmappe "AlleAngebote.xlsm" nicht.
Was muss am Code angepasst werden, damit alles kopiert wird?
3. Es wird immer der Blattschutz geöffnet und geschlossen. In der ersten Einstellung habe ich folgendes angehakt:
- Gesperrte Zellen auswählen
- Nicht gesperrte Zellen auswählen
- Objekte bearbeiten (Damit ich mit Hardcopy in den Druckbereich etwas einfügen kann)
Leider geht der Haken "Objekte bearbeiten" immer wieder raus.
Warum ist das so und wie kann man das ändern?
Vielen Dank für die Unterstützung.
VG Eisi :-)
Sub AngebotDrucken_2()
' PDF drucken
tbl_AngebotDrucken.Unprotect ("")
' Liegt ein Verzeichnis vor?
' Wenn nicht, dann lege eins an.
If Dir("C:" & "\Angebote", vbDirectory) = "" Then
MkDir "C:" & "\Angebote"
End If
' Angebotsnummer einstellen
Dim RechNr As Long
Dim Jahr As Integer
Dim ws As Worksheet
Dim DateiName As String
Set ws = ThisWorkbook.Worksheets("AngebotDrucken")
Jahr = ActiveWorkbook.BuiltinDocumentProperties(6)
RechNr = ActiveWorkbook.BuiltinDocumentProperties(5) ' Mit 4 auf Null setzen. Mit 5 hochzählen. (Mit 1 konnte ich auch schon mal auf Null stellen?
If Application.Dialogs(xlDialogPrinterSetup).Show = False Then Exit Sub
If Jahr Year(Date) Then
RechNr = 0
Jahr = Year(Date)
ActiveWorkbook.BuiltinDocumentProperties(6) = Jahr
End If
RechNr = RechNr + 1
ActiveWorkbook.BuiltinDocumentProperties(5) = RechNr
DateiName = Format(RechNr, "0000") & " - " & Jahr & " ! " & ws.Range("E1").Text
ws.Range("B4") = DateiName
'_________________________________________________________________________________________
' Seitenumbrüche entfernen
Dim i As Integer
With ActiveSheet
For i = .HPageBreaks.Count To 1 Step -1
.HPageBreaks(i).Delete
Next i
End With
' Seitenumbrüche setzen
Dim lngRow As Long
With ActiveSheet
For lngRow = 56 To .UsedRange.Rows.Count Step 55
.HPageBreaks.Add Before:=Cells(lngRow, 1)
Next lngRow
End With
'_________________________________________________________________________________________
' Drucken auf PDF
Dim DruckeAngebot As String
Dim LZeile As String
' Fehlermeldung abfangen
On Error Resume Next
DruckeAngebot = "C:\Angebote\" & DateiName & ".pdf"
'Suche die letzte befüllte Zeile
With ActiveSheet
LZeile = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious).Row
End With
'Seite formatieren
With ws.PageSetup
.Orientation = xlPortrait
.PrintArea = "$B$3:$I$" & LZeile
.Zoom = False
.FitToPagesTall = False
.FitToPagesWide = 1
.PrintTitleRows = ""
.PrintTitleColumns = ""
.LeftFooter = DateiName
End With
'PDF drucken (PDFCreator wählen)
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=DruckeAngebot, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
ActiveSheet.Range("A7").Select
'Passwortvergabe erfolgt hier nicht, erst nach **Call**
' tbl_AngebotDrucken.Protect ("")
Call AngebotInExcelCopy
End Sub

Public Sub AngebotInExcelCopy_2()
Dim wbkQuelle As Workbook
Dim wbkZiel As Workbook
Dim wksQuelle As Worksheet
Dim wksZiel As Worksheet
Dim rngCopy As Range
Dim Zeile_L As Long
Set wbkQuelle = Workbooks("AngebotsTool.xlsm")
For Each wbkZiel In Application.Workbooks
If LCase(wbkZiel.Name) = LCase("AlleAngebote.xlsm") Then
Exit For
End If
Next
If wbkZiel Is Nothing Then
Set wbkZiel = Workbooks.Open("C:\Angebote\AlleAngebote.xlsm")
End If
Set wksQuelle = wbkQuelle.Worksheets("AngebotDrucken")
With wksQuelle
Zeile_L = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Set rngCopy = .Range(.Cells(3, 2), .Cells(Zeile_L, 9))
End With
With wbkZiel
'neues Blatt am Ende einfügen
.Worksheets.Add After:=.Sheets(.Sheets.Count)
Set wksZiel = .Sheets(.Sheets.Count)
End With
With wksZiel
'Neues Blatt grau einfärben
.Cells.Interior.ColorIndex = xlNone
.Cells.Interior.ColorIndex = 15
End With
With wksZiel
rngCopy.Copy
With .Range("B3")
.PasteSpecial xlPasteColumnWidths
.PasteSpecial xlPasteFormats
.PasteSpecial xlPasteValues
End With
.Name = Range("B4").Text
End With
'ZielDatei speichern
wbkZiel.Save
tbl_AngebotDrucken.Protect ("")
End Sub

21
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: 3 Probleme
26.04.2021 17:26:56
Herbert_Grom
Hallo Eisi,
hast du es evtl. schon mal damit probiert:

ActiveSheet.Protect DrawingObjects:=False, Contents:=True, Scenarios:=True
Servus
AW: 3 Probleme
27.04.2021 08:40:25
Eisi
Guten Morgen Herbert,
Bingo :-) Das war die Lösung für Problem eins. Super, herzlichen Dank. :-)
GLG Eisi :-)
AW: 3 Probleme
27.04.2021 15:26:44
Herbert_Grom
Hallo Eisi,
wenn du mal eine Beispiel-AM hättest, könnten wir dir evtl. weiterhelfen!
Servus
AW: 3 Probleme
27.04.2021 16:19:05
Eisi
Hallo Herbert,
sehr freundlich, aber ich habe es soweit passend gemacht.
1. Ich gehe mal davon aus, dass im Angebot nur Text steht und der User sowieso keine Bilder da rein kopiert. Hoffentlich ;-) Darum ist im Moment das Problem mit den Bildern rüber kopieren nicht relevant, bzw. auf Eis gelegt.
2. Das alle Seiten auf PDF gedruckt wurde lag am fehlerhaften Code, warum auch immer der fehlerhaft ist.
Dieser Code findet die letzte Zeile nicht:
LZeile = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious).Row
Dieser aber schon:
LZeile = .Cells(.Rows.Count, 2).End(xlUp).Row
Darum lasse ich das jetzt so stehen, denn ich muss unbedingt bei meinen anderen Codes weiterkommen.
Wobei mir tatsächlich noch eine Frage in den Sinn kommt. Kann man eigentlich im Bereich B:I die letzte Zelle suchen? Ich habe zwar Spalte B eingestellt, aber es könnte sein, dass in Spalte C noch was steht.
Was meinst Du?
Vielen Dank für die Hilfe.
Schöne Grüße in die Heimat.
GLG Eisi :-)
Anzeige
AW: 3 Probleme
27.04.2021 16:36:57
Herbert_Grom
Hallo Eisi,
du fragst "Kann man eigentlich im Bereich B:I die letzte Zelle suchen?". Klar kann man das. Damit:
iLastRow = Range("B:I").CurrentRegion.Rows.Count
Servus
AW: 3 Probleme
27.04.2021 17:09:06
Thomas
Super, werde ich morgen mal testen. Cool.
Danke
GLG Eisi :-)
AW: 3 Probleme
28.04.2021 09:10:55
Eisi
Guten Morgen Herbert,
jetzt habe ich Deine Codezeile mal getestet, aber die wählt nicht die letzte Zelle und bleibt dann bei ***ActiveSheet.Range ("A7").Select*** hängen.
Was fehlt an dem Code? Vielen Dank. VG Eisi :-)

Sub DruckePDF ()
' Drucken auf PDF
Dim DruckeAngebot As String
Dim LZeile     As String
' Fehlermeldung abfangen
On Error Resume Next
DruckeAngebot = "C:\Angebote\" & DateiName & ".pdf"
'    LZeile = ActiveSheet.Cells(ActiveSheet.Rows.Count, 2).End(xlUp).Row  ' Das geht :-)
'    LZeile = ActiveSheet.Range("B:I").ActiveSheet.CurrentRegion.Rows.Count  ' Das geht nicht !!!!!!!!!!!!!!!!!!!!!!!
With ws
LZeile = .Range("B:I").CurrentRegion.Rows.Count 'Das geht auch nicht !!!!!!!!!!!!!!!!!!!!!!!
End With
'InputBox -> letzte befüllte Zeile gibt der User ein
'    Application.InputBox("Druckbereich festlegen:" & vbNewLine & "**Zeilennummer** (linke Seite) " _
'           & "für das Ende eintragen, bzw. scrolle nach unten zum Ende Deines Angebotes und klicke in die Zelle.", "Druckbereich")
'Seite formatieren
With ws.PageSetup
.Orientation = xlPortrait
'        .PrintArea = "$B$3:$I$181"
'        .PrintArea = "DruckbereichAngebot"
.PrintArea = "$B$3:$I$" & LZeile          ' **LZeile** = letzte befüllte Zeile, siehe Code oben
.Zoom = False
.FitToPagesTall = False                   'False ganze Seite einstellen
.FitToPagesWide = 1
.PrintTitleRows = ""
.PrintTitleColumns = ""
.LeftFooter = DateiName                   ' Dateiname immer in der Fusszeile links eintragen
End With
'PDF drucken (PDFCreator wählen)
ws.ExportAsFixedFormat Type:=xlTypePDF, Filename:=DruckeAngebot, _
Quality:=xlQualityStandard, IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=True
'_________________________________________________________________________________________
'Cursor steht in dieser Zelle
ActiveSheet.Range("A7").Select
'Passwortvergabe erfolgt hier nicht, erst nach **Call**
'    tbl_AngebotDrucken.Protect ("")
'Nächsten Code aufrufen
Call AngebotInExcelCopy
End Sub

Anzeige
AW: 3 Probleme
28.04.2021 09:15:00
Herbert_Grom
Hallo Eisi,
du bist doch auch nicht zum ersten Mal hier! Also, warum lädst du dann nicht eine Beispiel-Am hoch?
Servus
AW: 3 Probleme
28.04.2021 15:05:25
Herbert_Grom
Hallo Eisi,
du schreibst "Schöne Grüße in die Heimat.". Welche meinst du denn damit?
Servus
AW: 3 Probleme
28.04.2021 16:34:34
Eisi
Na ja ;-) meine Heimat ist Marktl, da wo der ehemalige Papst geboren ist, bzw. komme ich ursprünglich aus Herne ;-)
Wo Deine Heimat ist weiß ich noch nicht :-)
GLG Eisi :-)
AW: 3 Probleme
28.04.2021 16:40:17
Herbert_Grom
Meine ist München! Dort bin ich geboren und aufgewachsen und habe die ersten 26 Jahre meines Lebens dort gelebt. Dann 2 1/2 Jahre in Regensburg und jetzt lebe ich seit 42 Jahren in Pforzheim! Ich tu's nie wieder! ;o)=)
Wg iZeile: Probiers mal damit:

With ws
For iSpalte = 2 To 9 '* die Spalten B - I
If .Cells(Rows.Count, iSpalte).End(xlUp).Row > iZeile Then
iZeile = .Cells(Rows.Count, iSpalte).End(xlUp).Row
End If
Next iSpalte
End With
Servus
P.S.: Bei "Eisi" denke ich immer an "Eisi Gulp"! Kennst du sicher auch.
Anzeige
AW: 3 Probleme
28.04.2021 18:41:40
Thomas
Klar kenne ich den Eisi Gulp. Lustig das er meinen Spitznamen hat. Dein Code schau ich mir morgen an, sieht gut aus :-)
GLG Eisi
AW: 3 Probleme
29.04.2021 15:06:41
Eisi
Hallo Herbert,
Dein Code funktioniert perfekt. Herzlichen Dank. :-)
In meiner Überprüfung fällt mir ein anderes Problem auf.
Dieser Code:
With wksZiel
'Hyperlink im neuen Blatt setzen
.Range("A1").FormulaR1C1 = "=HYPERLINK(Inhaltsverzeichnis!R[3]C[1],""zurück"")"
End With
funktioniert eigentlich. Bzw. funktioniert der nur, wenn ich unter Datei / Optionen / Erweitert / Direkte Zellbearbeitung zulassen den Haken raus nehme.
Mit der Folge, wenn ich in einer anderen Mappe ich eine Zelle direkt ändern möchte, ich den Haken wieder setzen muss. Das ist ganz schön umständlich.
Das hatte ich noch nie.
Hast Du eine Idee, was am Code noch geändert werden muss, damit ich den Haken gesetzt lassen kann?
Vielen Dank.
VG Eisi :-)
Anzeige
AW: 3 Probleme
29.04.2021 15:53:48
Herbert_Grom
Hallo Eisi,
damit:

Sub DirekteZellBearbeitungAus()
Application.EditDirectlyInCell = False
End Sub
Sub DirekteZellBearbeitungEin()
Application.EditDirectlyInCell = True
End Sub
Servus
AW: 3 Probleme
29.04.2021 16:16:23
Eisi
Die Funktion verstehe ich.
Aber ich arbeite ja mit der Mappe "AngebotsTool" und drucke daraus eine PDF und übertrage dazu die Daten in eine Mappe mit Namen: AlleAngebote.xlsm".
Wenn die Daten vom AngebotsTool in ein neues Sheet in AlleAngebote erstellt wird, soll in darin in Zelle A1 ein Hyperlink erstellt werden.
Wenn ich Deine Codes jetzt zugrunde lege, dann sollte der eine in der Mappe AngebotsTool die Funktion einschalten, damit ich in den Zellen direkt was ändern kann und in der Mappe AlleAngebote müsste die Funktion ausgeschaltet werden / sein, damit ich mit Doppelklick den Hyperlink benutzen kann.
Wie ich das in den Codes zuordnen soll übersteigt meine Vorstellungekraft ;-) Das werde ich dem User nicht vermitteln können, wenn Du den Hyperlink benutzen willst, dann drücke zuerst den einen Button und danach den andern, damit der Haken wieder gesetzt ist.
Ich bin jetzt ziemlich planlos. Hast Du noch einen Hinweis in welche Richtung ich denken soll?
Vielen Dank.
VG Eisi :-)
Anzeige
AW: 3 Probleme
26.04.2021 18:42:41
Luschi
Hallo Eisi,
zum 1. Problem:
ändere die Suchrichtung von xlByRows auf xlByColumns, also Searchorder:=xlByColumns
dann sucht Vba von der letzten Spalte zur 1. und bei der Rückwärssuche (searchdirection:=xlPrevious) isat das eben wichtig.
Gruß von Luschi
aus klein-Paris
AW: 3 Probleme
26.04.2021 18:48:49
Luschi
Hallo Eisi,,
zum 2., Problem
hier würde ich das gesamte Tabellenblatt rüberkopieren und dann das nicht Notwendige weglöschen im kopierten Blatt , da sind die Bildchen dann auch dabei.
Gruß von Luschi
aus klein-Paris
.
AW: 3 Probleme
27.04.2021 09:00:32
Eisi
Irgendwie gefällt mir die Lösung nicht, weil ich schon so weit gekommen bin. Ich kann mir aber nicht vorstellen, dass es nicht einfach möglich sein soll, neben den Text auch Bilder mit rüber kopieren zu können.
Ach ja zu dem Druckbereich noch ein Gedanke. Der Druckbereich ist klar ab Spalte B definiert, trotzdem berücksichtigt der Code auch den Text in Spalte A und das kann ich überhaupt nicht verstehen. Warum ist das so? Danke :-)
Anzeige
AW: 3 Probleme
27.04.2021 13:20:11
Eisi
Das Problem mit der letzten Zeile habe ich gefunden.
Der Code:
LZeile = .Cells.Find(What:="*", After:=.Cells(1, 1), LookIn:=xlValues, _
lookat:=xlWhole, Searchorder:=xlByRows, searchdirection:=xlPrevious).Row
funktioniert nicht.
Aber dieser schon:
LZeile = .Cells(.Rows.Count, 2).End(xlUp).Row
Das mit den Bilder übertragen ist für mich unlösbar.
Vielen Dank für die Hilfe.
GLG eisi :-)
AW: 3 Probleme
27.04.2021 08:54:37
Eisi
Guten Morgen Luschi,
danke für Deine Hilfe. Das ist leider nicht die Lösung. Deine Änderung findet schon den letzten Eintrag, aber nur auf der ersten Seite. Auf der zweiten Seite steht aber auch noch Text und den findet die Änderung nicht mehr.
Ich hatte irgendwo mal gelesen, das man den letzten Eintrag auch von unten betrachtet suchen kann. Also ich schau vom Ende der Tabelle nach oben und suche den ersten Eintrag und das wäre dann meine letzte Zeile. Egal, ob weiter oben Leerzeilen sind oder nicht.
Ich habe so viel schon gelesen, dass ich schon nicht mehr weiß wo das war?
GLG Eisi :-)
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige