Live-Forum - Die aktuellen Beiträge
Datum
Titel
24.04.2024 19:29:30
24.04.2024 18:49:56
24.04.2024 17:19:09
Anzeige
Archiv - Navigation
1796to1800
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
mehrere Excel-Dateien als pdf
29.11.2020 18:09:00
Ulrich
Hallo,
ich möchte mit einem Makro alle im aktuellen Ordner vorhandenen *.XLS Dateien (Tabellenblatt 1) in eine pdf-Datei zusammengeführt und abgespeichert bekommen (auch im aktuellen Ordner)
Dateiname der PDF Protokollübersicht.pdf
Leider finde ich nichts passendes im Netz.
Kann mir jemand helfen
Vielleicht hilft die angehängte Datei, dort sind alle Dateien in Spalte c ab Zeile 7 aufgelistet.
Der Code kann natürlich auch wenn einfacher unabhängig von dieser Datei sein.
Gruß Ulli
https://www.herber.de/bbs/user/141934.xlsm

84
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: mehrere Excel-Dateien als pdf
29.11.2020 18:49:06
Nepumuk
Hallo Ulli,
lade die hier:
https://www.pdflabs.com/tools/pdftk-the-pdf-toolkit/
das PDFtk Toolkit herunter. Das kannst du dann so ansteuern:
Public Sub Test()
    Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & _
        "G:\Dokument1.pdf G:\Dokument2.pdf G:\Dokument3.pdf " & _
        "G:\Dokument4.pdf cat output G:\Dokument5.pdf", WindowStyle:=vbHide)
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
29.11.2020 20:27:07
Ulrich
Hallo Nepumuk,
ich habe das Toll herutergeladen.
Wenn ich das Makro starte passiert gar nichts? seltsam.
Im makro wir auf G:\ ... verwiesen, liegt es eventuell daran?
Kann man dort auf den aktuellen ordner verweisen?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
29.11.2020 20:30:26
Nepumuk
Hallo Ulli,
das ist natürlich nur ein Beispielcode. Da musst du natürlich deine Pfade eintragen.
Das Tool hast du installiert?
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
29.11.2020 20:34:23
Ulrich
Hallo Nepumuk,
der Pfad kann variieren.
Kann ich dort auf den aktuellen Ordner verweisen?
Das Tool habe ich installiert.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
29.11.2020 20:42:57
Nepumuk
Hallo Ulli,
alle Pdf's eines Ordner in ein Pdf? Ich mach jetzt Feierabend.
Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
29.11.2020 20:50:24
Ulrich
Hallo Nepumuk,
ich starte das Makro ja aus einer Excel-Datei, in dem Dateiordner, in dem diese Datei steht oder in Unterordner sind auch die XLS Protokolldateien.
Alle xls-Protokolldateien aus diesen Ordnern (nur das erste Tabellenblatt) sollen in eine pdf Datei zusammengeführt werden.
Danke, vielleicht bis morgen.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 10:30:23
Nepumuk
Hallo Ulli,
teste mal:
Option Explicit

Private Declare PtrSafe Function MakeSureDirectoryPathExists Lib "imagehlp.dll" ( _
    ByVal DirPath As String) As Long

Public Sub CreatePDF()
    
    Dim lngRow As Long, lngLastRow As Long
    Dim astrFiles() As String, strFolderPath As String, strFilePath As String
    Dim objWorkbook As Workbook
    
    strFolderPath = ThisWorkbook.Path & "\Temp\"
    
    If MakeSureDirectoryPathExists(strFolderPath) = 1 Then
        
        With Application
            .Calculation = xlCalculationManual
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        If Dir$(PathName:=strFolderPath & "*.*") <> vbNullString Then _
            Call Kill(PathName:=strFolderPath & "*.*")
        
        lngLastRow = Cells(Rows.Count, 3).End(xlUp).Row
        
        Redim astrFiles(7 To lngLastRow)
        
        For lngRow = 7 To lngLastRow
            
            Set objWorkbook = GetObject(PathName:=Cells(lngRow, 3).Hyperlinks(1).Address)
            
            strFilePath = strFolderPath & CStr(lngRow) & ".pdf"
            
            Call objWorkbook.Worksheets("Protokoll").ExportAsFixedFormat(Type:=xlTypePDF, _
                Filename:=strFilePath, Quality:=xlQualityStandard, IncludeDocProperties:=False, _
                IgnorePrintAreas:=False, OpenAfterPublish:=False)
            
            astrFiles(lngRow) = strFilePath
            
            Call objWorkbook.Close(SaveChanges:=False)
            
        Next
        
        Call Shell(PathName:="C:\Program Files (x86)\PDFtk\bin\pdftk.exe " & Join(astrFiles) & _
            " cat output " & ThisWorkbook.Path & "\Gesamt.pdf", WindowStyle:=vbHide)
        
        With Application
            .Calculation = xlCalculationAutomatic
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
    Else
        Call MsgBox("Fehler beim erstellen des temporären Ordners.", vbCritical, "Dateisystemfehler")
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 11:15:51
Ulrich
Hallo Nepumuk,
du bist genial !!
Funktioniert einwandfrei.
DANKE
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 11:40:45
Ulrich
Hallo Nepumuk,
Ich hoffe ich nerve nicht, hiermit ist auch erst einmal ende.
Noch eine ganz kleine Frage.
Aus meiner Protokoll-Vorlagedatei speichere ich die Protokolle mit folgendem Code.
Ist es möglich das nur der Druckbereich gespeichert wird?
Option Explicit
Public gblnCancel As Boolean
Sub Speichern()
' Speichern Makro
gblnCancel = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("M1").Value & _
Range("H1").Value & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
If Not gblnCancel Then
Workbooks.Open ThisWorkbook.Path & "\Protokoll.xls"
Dim WB As Workbook
For Each WB In Workbooks
If WB.Name  ThisWorkbook.Name And _
WB.Name  "Protokoll.xlsm" Then
WB.Close SaveChanges:=True
End If
Next WB
ThisWorkbook.Close SaveChanges:=True
End If
End Sub

Gruß Ulli
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 11:44:37
Ulrich
Hallo Nepumuk,
Und vielleicht auch noch speichern Ohne Makros?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 12:40:37
Nepumuk
Hallo Ulli,
im Modul "DieseArbeitsmappe":
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call CloseCamera
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
    Call Speichern
End Sub

Die Prozedur "Speichern":
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook, objWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim lngEmptyCells As Long
    
    For Each objCell In Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        objTargetWorksheet.Name = "Protokoll"
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        Call objTargetWorkbook.SaveAs(Filename:=ThisWorkbook.Path & "\" & _
            objSourceWorksheet.Range("M1").Value & objSourceWorksheet.Range("H1").Value & _
            ".xlsx", FileFormat:=xlOpenXMLWorkbook)
        
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objSourceWorksheet = Nothing
        
        Call Workbooks.Open(Filename:=ThisWorkbook.Path & "\Protokoll.xlsm")
        
        For Each objWorkbook In Workbooks
            
            If objWorkbook.Name <> "Protokoll.xlsm" And objWorkbook.Name <> ThisWorkbook.Name Then _
                Call objWorkbook.Close(Savechanges:=True)
            
        Next
        
        Call ThisWorkbook.Close(Savechanges:=False)
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 13:03:03
Ulrich
Hallo Nepumuk,
klappt alles super, nur die Protokoll.xlsm wird auch geschlossen.
Die soll ja als erneute Ausgangsdatei geöffnet bleiben. (Das ist jetzt raus)
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 13:09:37
Nepumuk
Hallo Ulli,
so?
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook, objWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim lngEmptyCells As Long
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        objTargetWorksheet.Name = "Protokoll"
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        Call objTargetWorkbook.SaveAs(Filename:=ThisWorkbook.Path & "\" & _
            objSourceWorksheet.Range("M1").Value & objSourceWorksheet.Range("H1").Value & _
            ".xlsx", FileFormat:=xlOpenXMLWorkbook)
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objSourceWorksheet = Nothing
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 13:23:55
Ulrich
Hallo Nepumuk,
alles super.
Ganz herzlichen Dank!!
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 13:34:53
Ulrich
Hallo Nepumuk,
ein ganz kleiner Fehler ist plötzlich doch noch.
Nach dem Speichern wird die Ursprungdatei "Protokoll.xlsm" wieder wie gewünscht geöffnet, aber mit den Daten die zu Letzt eingegeben wurden und unter dem neuen generierten Dateinamen abgespeichert wurden.
Vorher war es so das sie im Ursprungszustand ohne Daten wieder geöffnet wurde.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:10:42
Nepumuk
Hallo Ulli,
nein, die Datei bleibt offen da sie ja nicht unter einem anderen Namen gespeichert wurde.
Da müssen wir dein Konzept etwas ändern.
Speichere die Datei als .xltm (Vorlage mit Makros) Pass auf den Speicherpfad auf!!!
Wenn du die Vorlage ändern willst, mach einen Rechtsklick im Explorer darauf - Öffnen.
Ein Doppelklick erzeugt automatisch eine neue Datei. Damit kannst du auch sicher sein dass niemand deine Vorlage überschreibt.
Und das Makro änderst du so:
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook, objWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim lngEmptyCells As Long
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        Call objTargetWorkbook.SaveAs(Filename:=ThisWorkbook.Path & "\" & _
            objSourceWorksheet.Range("M1").Value & objSourceWorksheet.Range("H1").Value & _
            ".xlsx", FileFormat:=xlOpenXMLWorkbook)
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Call Workbooks.Add(Template:=ThisWorkbook.Path & "\Protokoll.xltm")
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objSourceWorksheet = Nothing
        
    End If
End Sub

Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:21:05
Nepumuk
Hallo Ulli,
Stop, da ist noch ein Fehler drin. Eine neu geöffnete Vorlage hat keinen Pfad und es ist nicht möglich den Pfad aus der sie geöffnet wurde festzustellen. Kann ich den Pfad als Konstante anlegen?
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:30:50
Ulrich
Hallo Nepumuk,
es wäre schön wenn es ohne Konstante gehen würde.
Da ich die Datei öfters verschieben muss.
Bevor wir speichern ohne Makro und Druckbereich hatten, funktionierte das Makro ja als normale .xlsm?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:36:40
Nepumuk
Hallo Ulli,
das Problem ist, ich kann eine Datei mit dem selben Namen nicht nochmal öffnen.
Gruß
Nepumuk
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:43:09
Ulrich
Hallo Nepumuk,
aber das lief doch, nur dass das Speichern nicht auf den Druckbereich bezogen war und die Makros nicht raus waren?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rngPflicht As Range, rngBereich As Range
Dim intLeere As Integer
Set rngPflicht = [H1,B9,B13,Bewertung]
For Each rngBereich In rngPflicht.Areas
intLeere = intLeere + Application.WorksheetFunction.CountBlank(rngBereich)
Next
If intLeere > 0 Then
Cancel = True
gblnCancel = True
MsgBox "Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !"
End If
End Sub
Option Explicit
Public gblnCancel As Boolean
Sub Speichern()
'
' Speichern Makro
'
gblnCancel = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("M1").Value & _
Range("H1").Value & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
If Not gblnCancel Then
Workbooks.Open ThisWorkbook.Path & "\Protokoll.xlsm"
Dim WB As Workbook
For Each WB In Workbooks
If WB.Name ThisWorkbook.Name And _
WB.Name "Protokoll.xlsm" Then
WB.Close SaveChanges:=True
End If
Next WB
ThisWorkbook.Close SaveChanges:=True
End If
End Sub
Anzeige
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:47:29
Nepumuk
Hallo Ulli,
im alten Code wurde die Datei unter einem anderen Namen gespeichert. Dadurch war es möglich die Protokoll-Datei zu öffnen bevor die neue Mappe geschlossen wurde. Das geht im neuen Code nicht mehr.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:54:16
Ulrich
Hallo Nepumuk,
das ist schade dass das nicht geht, damit wäre es perfekt gewesen.
Viele Grüße Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:55:38
Nepumuk
Hallo Ulli,
wie schon gesagt, mit einen hart codierten Pfad wäre es kein Problem.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 15:17:10
Ulrich
Hallo Nepumuk,
könntest du mir den Code mit dem Pfad angeben.
Ich würde den Pfad dann anpassen.
Viele Grüße Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 15:20:24
Nepumuk
Hallo Ulli,
Option Explicit

Public Sub Speichern()
    
    Const FOLDER_PATH As String = "H:\1129\" 'Anpassen, Backslash am Ende nicht löschen
    
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook, objWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim lngEmptyCells As Long
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        Call objTargetWorkbook.SaveAs(Filename:=FOLDER_PATH & _
            objSourceWorksheet.Range("M1").Value & objSourceWorksheet.Range("H1").Value & _
            ".xlsx", FileFormat:=xlOpenXMLWorkbook)
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Call Workbooks.Add(Template:=FOLDER_PATH & "Protokoll.xltm")
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objSourceWorksheet = Nothing
        
    End If
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 15:58:25
Ulrich
Hallo Nepumuk, jetzt kommt folgender Fehler.
Laufzeitfehler 1004 "Kann Kopie nicht öffnen, während die Vorlage 'Protokoll.xltm' geöffnet ist.
Userbild
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 16:10:27
Nepumuk
Hallo Ulli,
hast du die erste Datei auch per Doppelklick geöffnet? Es entsteht dabei eine Datei ohne Endung mit dem Namen Protokoll1. Nur zum ändern der Vorlage musst du sie per Rechtsklick - Öffnen öffnen.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 16:31:51
Ulrich
Hallo Nepumuk,
ich hatte die Datei aus der Übersicht "Zuletzt verwendet" geöffnet, das scheint auch nicht zu gehen, direkt aus den Verzeichnis heraus geht es.
Doof dass das speichern ohne Makro nicht in dem alten Code zu integrieren war, das hatte mir besser gefallen :-)
Sind beide Themen 1. Speichern entsprechend Druckbereich, und 2. Speichen ohne Makro nicht in dem alten Cod zu integrieren?
Danke für deine Hilfe
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 16:35:15
Nepumuk
Hallo Ulli,
nein. Wie soll ich die Protokoll-Datei öffnen wenn sie noch offen ist?
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 16:43:12
Ulrich
Hallo Nepumuk,
ich muss es wohl akzeptieren :-)
Ich dachte nur der alte code hatte ja auch unter einem neuen Namen gespeichert und die Ursprungsdatei wieder geöffnet.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 16:48:52
Nepumuk
Hallo Ulli,
du sagst es. Die Protokoll-Datei wurde unter einem anderen Namen gespeichert. Und das ist nun nicht mehr so, jetzt wird eine neue Datei erzeugt.
Das einzige was mir noch einfällt, ich speichere die ausgefüllt Protokoll-Datei z.B. im Temp-Ordner und überschreibe sie jedes mal, so wäre es nur eine Datei.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 17:01:18
Ulrich
Hallo Nepumuk,
ja wenn das funktioniert?
Mit dem alten Verfahren konnte ich mit einem kleines Makro z.B. Kopfdaten, die öfters kommen, in der xlsm abspeichern, dann waren diese nach dem Abspeichen natürlich da, mit einem anderen Makro konnte ich diese wieder löschen, das geht mit der Möglichkeit der Vorlagedatei xltm und folgend Protokoll1 nicht mehr.
Ja wenn das mit einem temp-Ordner klappen könnte?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 17:19:45
Nepumuk
Hallo Ulli,
teste mal:
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim lngEmptyCells As Long
    Dim strPath As String
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        strPath = ThisWorkbook.Path & "\"
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        With objSourceWorksheet
            
            Call objTargetWorkbook.SaveAs(Filename:=strPath & _
                .Range("M1").Value & .Range("H1").Value & _
                ".xlsx", FileFormat:=xlOpenXMLWorkbook)
            
        End With
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Application.DisplayAlerts = False
        Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled)
        Application.DisplayAlerts = True
        
        Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
        
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objSourceWorksheet = Nothing
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
    End If
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 17:26:21
Ulrich
Hallo Nepumuk,
der nächste Nobelpreis gehört dir!
Danke! Klasse!!
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 18:40:38
Ulrich
Hallo Nepumuk,
immer wieder was Neues.
Beim Speichen der Protokolle werden die Bilder nicht mit gespeichert, auch hatte ich einer Zelle einen Namen gegeben, auch das wird beim speichern wieder mit spalten und zeilennummer benannt.
Dies gibt dann Probleme beim Auslesen in die Übersichtsdatei.
Hast du eine Idee?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 19:18:39
Ulrich
Hallo Nepumuk,
die abgespeicherten Protokolldateien bekommen so wie es aussieht eine Verknüpfung angehängt.
Das führt auch beim Einlesen in die Übersichtsdatei zu Problemen.
(Und halt das die Bilder nicht mit gespeichert werden, obwohl sie im Druckbereich sind)
Gruß Ulli
Userbild
AW: mehrere Excel-Dateien als pdf
30.11.2020 19:57:26
Nepumuk
Hallo Ulli,
das sind wahrscheinlich die Gültigkeitslisten, die lösche ich jetzt. Teste mal:
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim objShape As Shape, objPicture As Picture
    Dim objName As Name
    Dim lngEmptyCells As Long
    Dim strPath As String
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        strPath = ThisWorkbook.Path & "\"
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        With objSourceWorksheet
            
            For Each objCell In .Range(.PageSetup.PrintArea).Columns(1).Cells
                
                objTargetWorksheet.Rows(objCell.Row).RowHeight = objCell.RowHeight
                
            Next
        End With
        
        For Each objShape In objSourceWorksheet.Shapes
            
            If objShape.Type = msoPicture Then
                
                objShape.Copy
                
                DoEvents
                
                Set objPicture = objTargetWorksheet.Pictures.Paste(Link:=False)
                
                With objPicture
                    
                    .Top = objShape.Top
                    .Left = objShape.Left
                    
                End With
            End If
        Next
        
        For Each objName In ThisWorkbook.Names
            
            Call objTargetWorkbook.Names.Add(Name:=objName.Name, RefersTo:=objName.RefersTo)
            
        Next
        
        For Each objCell In objTargetWorksheet.Cells.SpecialCells(Type:=xlCellTypeAllValidation)
            
            Call objCell.Validation.Delete
            
        Next
        
        With objSourceWorksheet
            
            Call objTargetWorkbook.SaveAs(Filename:=strPath & .Range("M1").Value & _
                .Range("H1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook)
            
        End With
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Application.DisplayAlerts = False
        Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled)
        Application.DisplayAlerts = True
        
        Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
        
        Set objSourceWorksheet = Nothing
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objPicture = Nothing
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
    End If
End Sub

Die unteren Bilder sind ein bisschen verschoben, aber besser brige ich es nicht hin.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
30.11.2020 20:54:22
Ulrich
Hallo Nepumuk,
es funktioniert alles. mehrfach getestet.
Ab und zu kommt noch folgender Fehler, wenn ich mit Foto speicher und der Schreibschutz eingeschaltet ist.
Ansonsten sieht es gut aus.
Vielen Dank, wirklich gut.
Gruß Ulli
Userbild
AW: mehrere Excel-Dateien als pdf
30.11.2020 21:06:07
Nepumuk
Hallo Ulli,
das hatten wir doch schon gelöst.
Option Explicit

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Call CloseCamera
End Sub

Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
    Call Speichern
End Sub

Private Sub Workbook_Open()
    Call Tabelle1.Protect(Password:="GEHEIM", UserInterfaceOnly:=True)
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 06:52:17
Ulrich
Hallo Nepumuk,
gerade alles noch einmal getestet. Klappt alles reibungslos !! wirklich schön.
Vielleicht noch eine Frage.
Die Fotos werden ja mit folgendem Code aufgenommen.
Funktioniert auch alles.
Nun die Frage: ist es möglich, dass das Foto in die Zelle oder dem Zellverbund, auf dem das Steuerelement steht, angepasst an Zellgröße eingestellt wird?
Würde den Ablauf etwas beschleunigen, ist aber auch kein muss.
Ich bin schon happy wie es aktuell läuft.
Gruß Ulli
Option Explicit
Option Private Module
Private Declare PtrSafe Function capCreateCaptureWindowA Lib "avicap32.dll" ( _
ByVal lpszWindowName As String, _
ByVal dwStyle As Long, _
ByVal x As Long, _
ByVal y As Long, _
ByVal nWidth As Long, _
ByVal nHeight As Long, _
ByVal hWndParent As LongPtr, _
ByVal nID As Long) As LongPtr
Private Declare PtrSafe Function CLSIDFromString Lib "ole32.dll" ( _
ByVal lpsz As Any, _
ByRef pCLSID As GUID) As Long
Private Declare PtrSafe Function SendMessageA Lib "user32.dll" ( _
ByVal hWnd As LongPtr, _
ByVal wMsg As Long, _
ByVal wParam As LongPtr, _
ByVal lParam As Any) As LongPtr
Private Declare PtrSafe Function DestroyWindow Lib "user32.dll" ( _
ByVal hWnd As LongPtr) As Long
Private Declare PtrSafe Function FindWindowA Lib "user32.dll" ( _
ByVal lpClassName As String, _
ByVal lpWindowName As String) As LongPtr
Private Declare PtrSafe Function OleCreatePictureIndirect Lib "oleaut32.dll" ( _
ByRef PicDesc As PIC_DESC, _
ByRef RefIID As GUID, _
ByVal fPictureOwnsHandle As Long, _
ByRef IPic As IPictureDisp) As Long
Private Declare PtrSafe Function CopyImage Lib "user32.dll" ( _
ByVal handle As LongPtr, _
ByVal un1 As Long, _
ByVal n1 As Long, _
ByVal n2 As Long, _
ByVal un2 As Long) As LongPtr
Private Declare PtrSafe Function IsClipboardFormatAvailable Lib "user32.dll" ( _
ByVal wFormat As Long) As Long
Private Declare PtrSafe Function OpenClipboard Lib "user32.dll" ( _
ByVal hWnd As LongPtr) As Long
Private Declare PtrSafe Function GetClipboardData Lib "user32.dll" ( _
ByVal wFormat As Long) As LongPtr
Private Declare PtrSafe Function EmptyClipboard Lib "user32.dll" () As Long
Private Declare PtrSafe Function CloseClipboard Lib "user32.dll" () As Long
Private Type GUID
Data1 As Long
Data2 As Integer
Data3 As Integer
Data4(0 To 7) As Byte
End Type
Private Type PIC_DESC
lngSize As Long
lngType As Long
lnghPic As LongPtr
lnghPal As LongPtr
End Type
Private Const PICTYPE_BITMAP As Long = 1
Private Const CF_BITMAP As Long = 2
Private Const IMAGE_BITMAP As Long = 0
Private Const LR_COPYRETURNORG As Long = &H4
Private Const GC_CLASSNAMEMSUSERFORM As String = "ThunderDFrame"
Private Const WS_CHILD As Long = &H40000000
Private Const WS_VISIBLE As Long = &H10000000
Private Const WM_CAP_START As Long = &H400
Private Const WM_CAP_EDIT_COPY As Long = (WM_CAP_START + 30)
Private Const WM_CAP_DRIVER_CONNECT As Long = (WM_CAP_START + 10)
Private Const WM_CAP_SET_PREVIEWRATE As Long = (WM_CAP_START + 52)
Private Const WM_CAP_SET_OVERLAY As Long = (WM_CAP_START + 51)
Private Const WM_CAP_SET_PREVIEW As Long = (WM_CAP_START + 50)
Private Const WM_CAP_DRIVER_DISCONNECT As Long = (WM_CAP_START + 11)
Private Const WM_CAP_GRAB_FRAME As Long = (WM_CAP_START + 60)
Private Const GUID_IPICTUREDISP As String = "{7BF80981-BF32-101A-8BBB-00AA00300CAB}"
Private llngptrCamHandle As LongPtr
Private llngTries As Long
Private lblnCameraOpen As Boolean
Public gblnCancelDialog As Boolean
Private Sub GrabPicture()
Call SendMessageA(llngptrCamHandle, WM_CAP_GRAB_FRAME, 0&, 0&)
Call SendMessageA(llngptrCamHandle, WM_CAP_EDIT_COPY, 0&, 0&)
End Sub

Public Sub CloseCamera()
Call Unload(Object:=UserForm2)
Call SendMessageA(llngptrCamHandle, WM_CAP_DRIVER_DISCONNECT, 0&, 0&)
Call DestroyWindow(llngptrCamHandle)
End Sub

Private Sub OpenCamera(hWndParent As LongPtr, plngWidth As Long, plngHeight As Long)
If Not lblnCameraOpen Then
llngptrCamHandle = capCreateCaptureWindowA("Video", WS_CHILD Or _
WS_VISIBLE, 0&, 0&, plngWidth, plngHeight, hWndParent, 0&)
If SendMessageA(llngptrCamHandle, WM_CAP_DRIVER_CONNECT, 0&, 0&) = 1 Then
gblnCancelDialog = False
Call SendMessageA(llngptrCamHandle, WM_CAP_SET_PREVIEWRATE, 30&, 0&)
Call SendMessageA(llngptrCamHandle, WM_CAP_SET_OVERLAY, 1&, 0&)
Call SendMessageA(llngptrCamHandle, WM_CAP_SET_PREVIEW, 1&, 0&)
Else
gblnCancelDialog = True
End If
End If
End Sub

Private Function Paste_Picture() As IPictureDisp
Dim lngReturn As Long, lngptrCopy As LongPtr, lngptrPointer As LongPtr
If IsClipboardFormatAvailable(CF_BITMAP)  0 Then
lngReturn = OpenClipboard(CLngPtr(Application.hWnd))
If lngReturn = 1 Then
lngptrPointer = GetClipboardData(CF_BITMAP)
lngptrCopy = CopyImage(lngptrPointer, IMAGE_BITMAP, 0&, 0&, LR_COPYRETURNORG)
Call CloseClipboard
If lngptrPointer  0 Then Set Paste_Picture = Create_Picture(lngptrCopy)
End If
End If
End Function

Private Function Create_Picture( _
ByVal lnghPic As LongPtr) As IPictureDisp
Dim udtPicInfo As PIC_DESC, udtID_IDispatch As GUID
Dim objPicture As IPictureDisp
Call CLSIDFromString(StrPtr(GUID_IPICTUREDISP), udtID_IDispatch)
With udtPicInfo
.lngSize = Len(udtPicInfo)
.lngType = PICTYPE_BITMAP
.lnghPic = lnghPic
.lnghPal = 0&
End With
Call OleCreatePictureIndirect(udtPicInfo, udtID_IDispatch, 0&, objPicture)
Set Create_Picture = objPicture
Set objPicture = Nothing
End Function

Public Function GetCameraPicture() As IPictureDisp
Static lngptrHwnd As LongPtr
Dim objPicture As IPictureDisp
Call OpenClipboard(CLngPtr(Application.hWnd))
Call EmptyClipboard
Call CloseClipboard
If Not lblnCameraOpen Then
Load UserForm2
lngptrHwnd = FindWindowA(GC_CLASSNAMEMSUSERFORM, UserForm2.Caption)
Call OpenCamera(lngptrHwnd, 640, 480)
End If
If Not gblnCancelDialog Then
Call GrabPicture
Set objPicture = Paste_Picture
If Not objPicture Is Nothing Then
lblnCameraOpen = True
Set GetCameraPicture = objPicture
Set objPicture = Nothing
llngTries = 0
Else
lblnCameraOpen = False
If llngTries 

Public Sub NewPhoto()
UserForm1.Show
End Sub

AW: mehrere Excel-Dateien als pdf
01.12.2020 09:35:02
Nepumuk
Hallo Ulli,
im Modul des Userforms1:
Private Sub CommandButton3_Click()
    Dim objPicture As Picture
    Set objPicture = Tabelle1.Pictures.Paste(Link:=False)
    With objPicture
        .ShapeRange.LockAspectRatio = msoTrue
        .Width = Tabelle1.Columns(8).Width
        .Height = Tabelle1.Rows("13:20").Height
        .Left = Tabelle1.Columns(8).Left + Tabelle1.Columns(8).Width / 2 - .Width / 2
        .Top = Tabelle1.Rows(13).Top
    End With
    Set objPicture = Nothing
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 12:17:19
Ulrich
Hallo Nepumuk,
ich habe in der Protokolldatei 5 Zellen in denen ich einen Commandbutton eingefügt habe um ein Foto einzufügen.
Die Zellen haben den Namen "Foto1, Foto2 ...Foto5"
Der Komplette Code sieht jetzt so aus (deine Ergänzung am Ende)
Ich denke da muss ich noch etwas anders zuweisen.
Gruß Ulli
Option Explicit
Private mblnStop As Boolean
Private Sub CommandButton1_Click()
mblnStop = True
CommandButton1.Enabled = False
CommandButton2.Enabled = True
CommandButton3.Enabled = True
End Sub

Private Sub CommandButton2_Click()
mblnStop = False
Call UserForm_Activate
End Sub

Private Sub CommandButton3_Click()
Tabelle1.Paste
End Sub

Private Sub CommandButton4_Click()
mblnStop = True
Call CloseCamera
Call Unload(Object:=UserForm2)
Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
CommandButton1.Enabled = True
CommandButton2.Enabled = False
CommandButton3.Enabled = False
Do
Set Image1.Picture = GetCameraPicture
DoEvents
Loop Until mblnStop Or gblnCancelDialog
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub

Private Sub CommandButton5_Click()
Dim objPicture As Picture
Set objPicture = Tabelle1.Pictures.Paste(Link:=False)
With objPicture
.ShapeRange.LockAspectRatio = msoTrue
.Width = Tabelle1.Columns(8).Width
.Height = Tabelle1.Rows("13:20").Height
.Left = Tabelle1.Columns(8).Left + Tabelle1.Columns(8).Width / 2 - .Width / 2
.Top = Tabelle1.Rows(13).Top
End With
Set objPicture = Nothing
End Sub

AW: mehrere Excel-Dateien als pdf
01.12.2020 12:20:55
Nepumuk
Hallo Ulli,
lade mal die Mappe hoch.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 13:22:30
Nepumuk
Hallo Ulli,
1. Tausche den Code im Userform komplett aus.
2. Im Modul3 befinden sich die neuen Prozeduren für die Fotos.
3. Weise jedem Button im Protokoll das entsprechende Makro aus Modul3 zu.
https://www.herber.de/bbs/user/141985.xlsm
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 13:43:27
Ulrich
Hallo Nebumuk,
tadellos, richtig gut.
Nur ein kleines Problem.
wenn ich in dem Protokoll in Spalte A Zeile 22-60 klicke, wird eine Zeile eingefügt, falls das Prüfmerkmal noch einmal kommt.
Somit verschieben sich die Felder für das Foto.
Kann ich den range Bereich für die Fotos namentlich benennen, unabhängig von Spaltenummer/Zeilennummer?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 14:05:46
Nepumuk
Hallo Ulli,
klar geht das.
Im Modul3:
Option Explicit

Public Sub NewPhoto1()
    With UserForm1
        Set .Range = Range("Foto1")
        Call .Show
    End With
End Sub

Public Sub NewPhoto2()
    With UserForm1
        Set .Range = Range("Foto2")
        Call .Show
    End With
End Sub

Public Sub NewPhoto3()
    With UserForm1
        Set .Range = Range("Foto3")
        Call .Show
    End With
End Sub

Public Sub NewPhoto4()
    With UserForm1
        Set .Range = Range("Foto4")
        Call .Show
    End With
End Sub

Public Sub NewPhoto5()
    With UserForm1
        Set .Range = Range("Foto5")
        Call .Show
    End With
End Sub

Und der Code im Userform:
Option Explicit

Private mblnStop As Boolean
Private mobjRange As Range

Private Sub CommandButton1_Click()
    mblnStop = True
    CommandButton1.Enabled = False
    CommandButton2.Enabled = True
    CommandButton3.Enabled = True
End Sub

Private Sub CommandButton2_Click()
    mblnStop = False
    Call UserForm_Activate
End Sub

Private Sub CommandButton3_Click()
    Dim objPicture As Picture
    Set objPicture = Tabelle1.Pictures.Paste(Link:=False)
    With objPicture
        .ShapeRange.LockAspectRatio = msoTrue
        .Width = Range.MergeArea.Width
        .Height = Range.MergeArea.Height
        If .Width > Range.MergeArea.Width Then .Width = Range.MergeArea.Width
        .Left = Range.Columns(1).Left + Range.MergeArea.Width / 2 - .Width / 2
        .Top = Range.Rows(1).Top + Range.MergeArea.Height / 2 - .Height / 2
    End With
    Set objPicture = Nothing
End Sub

Private Sub CommandButton4_Click()
    mblnStop = True
    Call CloseCamera
    Call Unload(Object:=UserForm2)
    Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
    CommandButton1.Enabled = True
    CommandButton2.Enabled = False
    CommandButton3.Enabled = False
    Do
        Set Image1.Picture = GetCameraPicture
        DoEvents
    Loop Until mblnStop Or gblnCancelDialog
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
    If CloseMode = vbFormControlMenu Then
        Cancel = 1
    Else
        Set Range = Nothing
    End If
End Sub

Friend Property Get Range() As Range
    Set Range = mobjRange
End Property

Friend Property Set Range(ByRef probjRange As Range)
    Set mobjRange = probjRange
End Property

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 14:17:35
Ulrich
Hallo Nepumuk,
tip top super!!
Könntest du mir noch verraten wie folgender Code nicht bei Zelle markieren sondern bei doppelklick auf Zelle starten würde.
Danach bin ich glücklich und zufrieden :-)
Gruß Ulli
Sub ZeileEinfügen()
ActiveSheet.Unprotect Password:="4711"
With Selection.Cells(1, 1).EntireRow
.Copy
a = ActiveCell.Row
.Offset(1).Insert Shift:=xlDown
Range("h" & a + 1 & ":i" & a + 1).ClearContents
End With
Application.CutCopyMode = False
ActiveSheet.Protect Password:="4711"
End Sub

AW: mehrere Excel-Dateien als pdf
01.12.2020 14:45:16
Nepumuk
Hallo Ulli,
so:
Option Explicit

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
    If Target.Row > 21 And Target.Row < 61 Then
        With Target.EntireRow
            Call .Copy
            Call .Offset(1).Insert(Shift:=xlShiftDown)
            Call .Range("H1:I1").Offset(1, 0).ClearContents
        End With
        Application.CutCopyMode = False
        Cancel = True
    End If
End Sub

Das Makro "ZeileEinfügen" kannst du löschen. Und im Modul änderts du den Code so:
Option Explicit

Public Sub BlattschutzEIN()
    '
    ' BlattschutzEIN Makro
    '
    Call Tabelle1.Protect(Password:="4711", UserInterfaceOnly:=True)
    '
End Sub

Public Sub BlattschutzAUS()
    '
    ' BlattschutzAUS Makro
    '
    Call Tabelle1.Unprotect(Password:="4711")
    '
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 15:00:56
Ulrich
Hallo Nepumuk,
funktioniert super.
Beim Speichern habe ich nur folgenden Fehler:
Laufzeitfehler ‚1004‘
Die Paste-Eigenschaft des Pictures-Objektes kann nicht zugeordnet werden.

er verweist auf diese stelle im Code
For Each objShape In objSourceWorksheet.Shapes
If objShape.Type = msoPicture Then
objShape.Copy
DoEvents
Set objPicture = objTargetWorksheet.Pictures.Paste(Link:=False)
With objPicture
.Top = objShape.Top
.Left = objShape.Left
End With
End If
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 15:17:36
Nepumuk
Hallo Ulli,
kann ich zwar nicht nachvollziehen, aber ändere den Code mal so:
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim objShape As Shape, objPicture As Picture
    Dim objName As Name
    Dim lngEmptyCells As Long
    Dim strPath As String
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        strPath = ThisWorkbook.Path & "\"
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
        End With
        
        Application.CutCopyMode = False
        
        With objSourceWorksheet
            
            For Each objCell In .Range(.PageSetup.PrintArea).Columns(1).Cells
                
                objTargetWorksheet.Rows(objCell.Row).RowHeight = objCell.RowHeight
                
            Next
        End With
        
        On Error Resume Next
        
        For Each objShape In objSourceWorksheet.Shapes
            
            If objShape.Type = msoPicture Then
                
                Do
                    
                    Call objShape.Copy
                    
                    DoEvents
                    
                    Set objPicture = objTargetWorksheet.Pictures.Paste(Link:=False)
                    
                    If Err.Number = 0 Then Exit Do
                    
                    Call Err.Clear
                    
                Loop
                
                With objPicture
                    
                    .Top = objShape.Top
                    .Left = objShape.Left
                    
                End With
            End If
        Next
        
        On Error GoTo 0
        
        For Each objName In ThisWorkbook.Names
            
            Call objTargetWorkbook.Names.Add(Name:=objName.Name, RefersTo:=objName.RefersTo)
            
        Next
        
        For Each objCell In objTargetWorksheet.Cells.SpecialCells(Type:=xlCellTypeAllValidation)
            
            Call objCell.Validation.Delete
            
        Next
        
        With objSourceWorksheet
            
            Call objTargetWorkbook.SaveAs(Filename:=strPath & .Range("M1").Value & _
                .Range("H1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook)
            
        End With
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Application.DisplayAlerts = False
        Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled)
        Application.DisplayAlerts = True
        
        Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
        
        Set objSourceWorksheet = Nothing
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objPicture = Nothing
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
    End If
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 15:26:52
Ulrich
Hallo Nepumuk,
einige Versuche gefahren mit unterschiedlichen Fotos.
LÄUFT STABIL TOP !! Danke!
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 15:42:15
Ulrich
Hallo Nepumuk,
sorry das ich mich noch einmal melde.
Ein kleines Problem ist noch da.
Die Ursprungsdatei hat normal 2 Seiten.(Druck)
Die abgespeicherten Protokolldateien würden 6 Seitig gedruckt.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 15:55:55
Nepumuk
Hallo Ulli,
ergänze:
With objTargetWorksheet
    
    .Name = "Protokoll"
    Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
    Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
    Call .Cells(1, 1).Select
    .UsedRange.Value = .UsedRange.Value
    
    With .PageSetup
        
        .PrintArea = objSourceWorksheet.PageSetup.PrintArea
        .Zoom = False
        .FitToPagesTall = 2
        .FitToPagesWide = 1
        
    End With
End With

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
01.12.2020 16:22:19
Ulrich
Hallo Nepumuk,
ich habe das im Speicher-Makro ergänzt bei dem Punkt With objTargetWorksheet,
jetzt kommt wieder die Fehlermeldung beim Speichern mit Bild
Laufzeitfehler 1004
Die Paste-Eigenschaft des Pictures-Objektes kann nicht zugeordnet werden.

Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 16:32:58
max.kaffl@gmx.de
Hallo Ulli,
das haben wir doch gerade behoben. Also nochmal das komplette Makro:
Option Explicit

Public Sub Speichern()
    '
    ' Speichern Makro
    '
    Dim objCell As Range
    Dim objTargetWorkbook As Workbook
    Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
    Dim objShape As Shape, objPicture As Picture
    Dim objName As Name
    Dim lngEmptyCells As Long
    Dim strPath As String
    
    Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
    
    For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
        lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
    Next
    
    If lngEmptyCells > 0 Then
        
        Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, "Hinweis")
        
    Else
        
        With Application
            .EnableEvents = False
            .ScreenUpdating = False
        End With
        
        strPath = ThisWorkbook.Path & "\"
        
        Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
        Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
        
        With objSourceWorksheet
            
            Call .Range(.PageSetup.PrintArea).Copy
            
        End With
        
        With objTargetWorksheet
            
            .Name = "Protokoll"
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
            Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
            Call .Cells(1, 1).Select
            .UsedRange.Value = .UsedRange.Value
            
            With .PageSetup
                
                .PrintArea = objSourceWorksheet.PageSetup.PrintArea
                .Zoom = False
                .FitToPagesTall = 2
                .FitToPagesWide = 1
                
            End With
        End With
        
        Application.CutCopyMode = False
        
        With objSourceWorksheet
            
            For Each objCell In .Range(.PageSetup.PrintArea).Columns(1).Cells
                
                objTargetWorksheet.Rows(objCell.Row).RowHeight = objCell.RowHeight
                
            Next
        End With
        
        On Error Resume Next
        
        For Each objShape In objSourceWorksheet.Shapes
            
            If objShape.Type = msoPicture Then
                
                Do
                    
                    Call objShape.Copy
                    
                    DoEvents
                    
                    Set objPicture = objTargetWorksheet.Pictures.Paste(Link:=False)
                    
                    If Err.Number = 0 Then Exit Do
                    
                    Call Err.Clear
                    
                Loop
                
                With objPicture
                    
                    .Top = objShape.Top
                    .Left = objShape.Left
                    
                End With
            End If
        Next
        
        On Error GoTo 0
        
        For Each objName In ThisWorkbook.Names
            
            Call objTargetWorkbook.Names.Add(Name:=objName.Name, RefersTo:=objName.RefersTo)
            
        Next
        
        For Each objCell In objTargetWorksheet.Cells.SpecialCells(Type:=xlCellTypeAllValidation)
            
            Call objCell.Validation.Delete
            
        Next
        
        With objSourceWorksheet
            
            Call objTargetWorkbook.SaveAs(Filename:=strPath & .Range("M1").Value & _
                .Range("H1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook)
            
        End With
        
        Call objTargetWorkbook.Close(SaveChanges:=False)
        
        Application.DisplayAlerts = False
        Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
            FileFormat:=xlOpenXMLWorkbookMacroEnabled)
        Application.DisplayAlerts = True
        
        Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
        
        Set objSourceWorksheet = Nothing
        Set objTargetWorksheet = Nothing
        Set objTargetWorkbook = Nothing
        Set objPicture = Nothing
        
        With Application
            .EnableEvents = True
            .ScreenUpdating = True
        End With
        
        Call ThisWorkbook.Close(SaveChanges:=False)
        
    End If
End Sub

Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
03.12.2020 17:57:12
Ulrich
Hallo Nepumuk,
ganz kurze Frage:
Meine Protokolldatei läuft auf meinem PC problemlos.
Jetzt habe ich diese auf meinen Notebook gespeichert.
Wenn ich jetzt ein Foto machen möchte geht die LED der Camera an, der WebCam Viewer verschwindet aber wieder direkt.
Wenn ich ein weiters mal das Makro starte kommt die Fehlermeldung:
Error - Webcam can't show in Userform
Was kann man denn da machen.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
04.12.2020 08:01:26
Ulrich
Hallo Nepumuk,
noch einmal kurz zu dem Foto-Fehler.
Ich habe es am Laptop mit einer externen Kamera versucht, damit klappt alles wie zuvor.
Mit der internen Kamera (HP Wide Vision HD) hat er mit dem UserForm1 Probleme.
Wenn ich mir eine neue Kamera kaufe, muss ich auf etwas achten, damit diese über das Makro richtig angesteuert wird?
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
04.12.2020 08:13:32
Nepumuk
Hallo Ulli,
kann ich nicht sagen. Ich habe das nie getestet.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 08:29:04
Ulrich
Hallo Nepumuk,
danke für die schnelle Antwort.
Vielleicht noch einmal ganz kurz,
beim Zusammenfassen meiner Protokolle macht er mir mit der im Protokoll benannten Zelle "Ergebnis1" Probleme.
Laufzeitfehler 1004. Anwendungs- oder objektdefinierter Fehler.
Wenn ich diese Zeile als Bemerkung deklariere läuft alles Andere.
Hier die letzte Zeile: Ist da etwas verkehrt?
With objWorkbook.Worksheets(1)
Tabelle1.Cells(ialngIndex + 6, 1).Value = .Cells(1, 8).Value
Tabelle1.Cells(ialngIndex + 6, 2).Value = .Cells(2, 8).Value
Tabelle1.Cells(ialngIndex + 6, 4).Value = .Cells(3, 8).Value
Tabelle1.Cells(ialngIndex + 6, 5).Value = .Cells(5, 8).Value
Tabelle1.Cells(ialngIndex + 6, 6).Value = .Cells(13, 2).Value
Tabelle1.Cells(ialngIndex + 6, 7).Value = .Cells(15, 2).Value
Tabelle1.Cells(ialngIndex + 6, 8).Value = .Cells(16, 2).Value
Tabelle1.Cells(ialngIndex + 6, 9).Value = .Cells(18, 2).Value
Tabelle1.Cells(ialngIndex + 6, 10).Value = .Cells(19, 2).Value
'Tabelle1.Cells(ialngIndex + 6, 11).Value = .Cells(18, 2).Value
Tabelle1.Cells(ialngIndex + 6, 12).Value = .Cells(18, 5).Value
Tabelle1.Cells(ialngIndex + 6, 13).Value = .Cells(9, 2).Value
'Tabelle1.Cells(ialngIndex + 6, 14).Value = .Cells(18, 2).Value
Tabelle1.Cells(ialngIndex + 6, 15).Value = .Range("Ergebnis1").Value
End With
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
04.12.2020 09:06:41
Nepumuk
Hallo Ulli,
nein, das ist alles richtig. Schau mal in dieser Datei ob es den Namen gibt. In den neuen Dateien werden die Namen übertragen.
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 09:41:14
Ulrich
Hallo Nepumuk,
ich habe das Feld noch einmal neu benannt, gespeichert, jetzt geht es, alles gut.
Du hast mir ja auch ein Makro zum Speichern aller Protokolle in eine pdf erstellt.
Auch das funktioniert gut.
Wenn ich das Makro mal ausgeführt habe und ich die Übersichtsdatei speicher und ich das Makro noch einmal ausführe kommt schon mal folgender Fehler.(Anlage) Dann kann ich es auch nicht mehr ausführen.
Wenn ich die Übersichtsdatei über "Speichern unter" unter dem gleichen Dateinamen speicher, dann geht das Makro wieder. etaws seltsam
Gruß Ulli
Userbild
AW: mehrere Excel-Dateien als pdf
04.12.2020 09:58:40
Nepumuk
Hallo Ulli,
merkwürdig. Markiert der Debugger eine bestimmte Zeile?
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 10:03:50
Ulrich
Hallo Nepumuk,
ja folgende.
Gruß Ulli
Userbild
AW: mehrere Excel-Dateien als pdf
04.12.2020 10:12:20
Nepumuk
Hallo Ulli,
wenn es die Datei nicht gäbe, würde der Fehler 432 kommen. Bau mal vor der Zeile ein:
Debug.Print Cells(lngRow, 3).Hyperlinks(1).Address
Und schau dir die im Direktbereich zuletzt angezeigte Datei an. Kannst du die im Explorer normal öffnen?
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 10:32:31
Ulrich
Hallo Nepumuk,
Datei im Direktbereich?, weiss nicht genau was du meinst.
Ich habe die Zeile eingebaut, nach abspeichern der Datei dauerte es jetzt etwas länger bis der Fehler wieder kam.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
04.12.2020 10:38:55
Nepumuk
Hallo Ulli,
das kleine Fenster unten links:
Userbild
Wenn es nicht angezeigt wird, Strg+g drücken. Ganz nach unten scrollen und die Datei aus der letzten Zeile versuchen per Doppelklick im Explorer öffnen
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 11:01:27
Ulrich
Hallo Nepumuk,
alles klar, gefunden, wenn der Fehler das nächste mal kommt werde ich nachsehen.
Könntest du mir noch verraten, welche Zeilen im Code ich deaktivieren oder ändern müsste, wenn ich die Protokolldatei mit Makro und Formeln abspeichern möchte.
Gruß Ulli
Option Explicit
Public Sub Speichern()
' Speichern Makro
Dim objCell As Range
Dim objTargetWorkbook As Workbook
Dim objTargetWorksheet As Worksheet, objSourceWorksheet As Worksheet
Dim objShape As Shape, objPicture As Picture
Dim objName As Name
Dim lngEmptyCells As Long
Dim strPath As String
Set objSourceWorksheet = ThisWorkbook.Worksheets("Protokoll")
For Each objCell In objSourceWorksheet.Range("H1,B9,B13,Bewertung")
lngEmptyCells = lngEmptyCells + IIf(IsEmpty(objCell.Value), 1, 0)
Next
If lngEmptyCells > 0 Then
Call MsgBox("Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !", vbExclamation, " _
Hinweis")
Else
With Application
.EnableEvents = False
.ScreenUpdating = False
End With
strPath = ThisWorkbook.Path & "\"
Set objTargetWorkbook = Workbooks.Add(Template:=xlWBATWorksheet)
Set objTargetWorksheet = objTargetWorkbook.Worksheets(1)
With objSourceWorksheet
Call .Range(.PageSetup.PrintArea).Copy
End With
With objTargetWorksheet
.Name = "Protokoll"
Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteColumnWidths)
Call .Cells(1, 1).PasteSpecial(Paste:=xlPasteAll)
Call .Cells(1, 1).Select
.UsedRange.Value = .UsedRange.Value
With .PageSetup
.PrintArea = objSourceWorksheet.PageSetup.PrintArea
.Zoom = False
.FitToPagesTall = 2
.FitToPagesWide = 1
End With
End With
Application.CutCopyMode = False
With objSourceWorksheet
For Each objCell In .Range(.PageSetup.PrintArea).Columns(1).Cells
objTargetWorksheet.Rows(objCell.Row).RowHeight = objCell.RowHeight
Next
End With
On Error Resume Next
For Each objShape In objSourceWorksheet.Shapes
If objShape.Type = msoPicture Then
Do
Call objShape.Copy
DoEvents
Set objPicture = objTargetWorksheet.Pictures.Paste(Link:=False)
If Err.Number = 0 Then Exit Do
Call Err.Clear
Loop
With objPicture
.Top = objShape.Top
.Left = objShape.Left
End With
End If
Next
On Error GoTo 0
For Each objName In ThisWorkbook.Names
Call objTargetWorkbook.Names.Add(Name:=objName.Name, RefersTo:=objName.RefersTo)
Next
For Each objCell In objTargetWorksheet.Cells.SpecialCells(Type:=xlCellTypeAllValidation) _
Call objCell.Validation.Delete
Next
With objSourceWorksheet
Call objTargetWorkbook.SaveAs(Filename:=strPath & .Range("M1").Value & _
.Range("H1").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook)
End With
Call objTargetWorkbook.Close(SaveChanges:=False)
Application.DisplayAlerts = False
Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled)
Application.DisplayAlerts = True
Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
Set objSourceWorksheet = Nothing
Set objTargetWorksheet = Nothing
Set objTargetWorkbook = Nothing
Set objPicture = Nothing
With Application
.EnableEvents = True
.ScreenUpdating = True
End With
Call ThisWorkbook.Close(SaveChanges:=False)
End If
End Sub

AW: mehrere Excel-Dateien als pdf
04.12.2020 11:13:03
Nepumuk
Hallo Ulli,
verwende den "alten Code"
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 11:27:34
Ulrich
Hallo Nepumuk,
da habe ich nur noch folgenden Code, dort sind die Pflichtfelder und der gleichen noch nicht integriert.
Option Explicit
Public gblnCancel As Boolean
Sub Speichern()
' Speichern Makro
gblnCancel = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("M1").Value & _
Range("H1").Value & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("M1").Value & _
Range("H1").Value & ".pdf", FileFormat:=xlOpenXMLWorkbookMacroEnabled
If Not gblnCancel Then
Workbooks.Open ThisWorkbook.Path & "\Protokoll.xlsm"
Dim WB As Workbook
For Each WB In Workbooks
If WB.Name  ThisWorkbook.Name And _
WB.Name  "Protokoll.xlsm" Then
WB.Close SaveChanges:=True
End If
Next WB
ThisWorkbook.Close SaveChanges:=True
End If
End Sub

Gruß Ulli
AW: mehrere Excel-Dateien als pdf
04.12.2020 11:30:06
Nepumuk
Hallo Ulli,
da fehlt noch der Code in "DieseArbeitsmappe".
Gruß
Nepumuk
AW: mehrere Excel-Dateien als pdf
04.12.2020 11:52:15
Ulrich
Hallo Nepumuk,
läuft alles !! Danke!!
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
08.12.2020 16:50:10
Ulrich
Hallo Nepumuk,
ich habe heute das kleine Excelprogramm im Einsatz gehabt,
es funktioniert wirklich gut.
Folgende kleine Fehler sind noch da die etwas doof sind, da das Programm manchmal abstürzt.
1. Wenn ich aus der Vorlage eine Protokoll abspeichere und dann ein neues Eingebe und ein Foto hinzufügen möchte bringt er folgenden Fehler (weiter unten) wenn ich vorher einmal über die Button Blattschutz aus und wieder ein eingebe, kommt der Fehler nicht.
2. Wenn ich nach dem Abspeichern mit doppelklick auf das Feld io oder nio ein Kreuzchen eingeben möchte, fragt er erst nach dem Paßwort für den Blattschutz. Weiter Kreuzchen kann ich dann setzen obwohl der Blattschutz drin ist.
Es scheint alles irgendwie mit dem Blattschutz zusammen zu hängen.
Ich schicke dir jetzt einmal die Fehlermeldung, mit der nächsten Mail die ganze Datei.
Vielleicht hast du noch einmal Zeit nachzusehen, wäre super.
Morgen wollte ich es weiter nutzen :-)
Gruß Ulli
Userbild
AW: mehrere Excel-Dateien als pdf
08.12.2020 17:03:19
Ulrich
Hallo Nepumuk,
hier noch einmal die Datei
bei der eben ging das mit den Doppelklick nicht richtig
Gruß Ulli
https://www.herber.de/bbs/user/142168.xlsm
AW: mehrere Excel-Dateien als pdf
04.12.2020 10:37:14
Ulrich
Hallo Nepumuk,
ich habe es jetzt noch einige male durchgeführt, der Fehler kommt nicht mehr.
Läuft stabiler.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 16:28:47
Ulrich
Hallo Nepumuk,
wenn ich den Blattschutz herausnehme geht es.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 16:34:47
Ulrich
Hallo Nepumuk,
habe mal alles neu gestartet,
aktuell läuft es wie gewollt.
Alles gut.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
01.12.2020 12:22:34
Ulrich
Hallo Nepumuk,
ich habe in der Protokolldatei 5 Zellen in denen ich einen Commandbutton eingefügt habe um ein Foto einzufügen.
Die Zellen haben den Namen "Foto1, Foto2 ...Foto5"
Der Komplette Code sieht jetzt so aus (deine Ergänzung am Ende)
Ich denke da muss ich noch etwas anders zuweisen.
Gruß Ulli
Option Explicit
Private mblnStop As Boolean
Private Sub CommandButton1_Click()
mblnStop = True
CommandButton1.Enabled = False
CommandButton2.Enabled = True
CommandButton3.Enabled = True
End Sub

Private Sub CommandButton2_Click()
mblnStop = False
Call UserForm_Activate
End Sub

Private Sub CommandButton3_Click()
Tabelle1.Paste
End Sub

Private Sub CommandButton4_Click()
mblnStop = True
Call CloseCamera
Call Unload(Object:=UserForm2)
Call Unload(Object:=Me)
End Sub

Private Sub UserForm_Activate()
CommandButton1.Enabled = True
CommandButton2.Enabled = False
CommandButton3.Enabled = False
Do
Set Image1.Picture = GetCameraPicture
DoEvents
Loop Until mblnStop Or gblnCancelDialog
End Sub

Private Sub UserForm_QueryClose(Cancel As Integer, CloseMode As Integer)
Cancel = CloseMode = vbFormControlMenu
End Sub

Private Sub CommandButton5_Click()
Dim objPicture As Picture
Set objPicture = Tabelle1.Pictures.Paste(Link:=False)
With objPicture
.ShapeRange.LockAspectRatio = msoTrue
.Width = Tabelle1.Columns(8).Width
.Height = Tabelle1.Rows("13:20").Height
.Left = Tabelle1.Columns(8).Left + Tabelle1.Columns(8).Width / 2 - .Width / 2
.Top = Tabelle1.Rows(13).Top
End With
Set objPicture = Nothing
End Sub

AW: mehrere Excel-Dateien als pdf
01.12.2020 12:26:10
Ulrich
Hallo Nepumuk,
noch eine Ergänzung, die Fotos werden jetzt immer in Zelle H13 (Zellname Foto1) abgelegt, links oben ausgerichtet, aber nach rechts und unten über die Zelle hinaus.
(egal von welchem Commandbutton, immer an dieser Stelle)
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:24:38
Ulrich
Hallo Nepumuk,
mir scheint das er die Datei nach dem Makro "Speichern" nicht neu öffnet.
Auch in der Protokoll.xltm bleiben die Daten nach Aufrufen des Makro "Speichern".
Da schein ein kleiner Fehler im Code zu sein.
Vorher ging es ja.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 14:10:27
Ulrich
Hallo Nepumuk,
habe noch einiges versucht.
Ich bekomme es nicht hin.
wenn ich jetzt Daten eingebe und speicher, werden die Daten auch in der Vorlage gespeichert.
Vorher war es nicht so.
Gruß Ulli
AW: mehrere Excel-Dateien als pdf
30.11.2020 13:15:10
Ulrich
Hallo Nepumuk,
dies hatte ich bei "DieseArbeitsmappe" rausgenommen.
Ich denke das war richtig?
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
Dim rngPflicht As Range, rngBereich As Range
Dim intLeere As Integer
Set rngPflicht = [H1,B9,B13,Bewertung]
For Each rngBereich In rngPflicht.Areas
intLeere = intLeere + Application.WorksheetFunction.CountBlank(rngBereich)
Next
If intLeere > 0 Then
Cancel = True
gblnCancel = True
MsgBox "Bitte zuerst alle Pflicht-Felder (Blau) ausfüllen !"
End If
End Sub

AW: mehrere Excel-Dateien als pdf
30.11.2020 13:19:15
Nepumuk
Hallo Ulli,
ja. Die Prüfung erfolgt in der Prozedur "Speichern" das ja nicht das Original sondern eine Kopie davon gespeichert wird.
Gruß
Nepumuk

312 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige