Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1800to1804
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
Speichern in neuen Ordner
19.12.2020 18:17:12
Ulrich
Hallo zusammen,
ich habe da eine Frage.
Mit folgenden Code speichere ich: 1. die Exceldatei unter neuen Namen ab und 2. wir die Datei als pdf gespeichert.
Es wäre schön wenn die pdf-Datei in einen Unterordner "pdf" und die Exceldatei in einen Unterordner "Makro" gespeichert werden könnten.
Wenn es die Unterordner nicht gibt sollten diese angelegt werden.
Kann mir hier jemand helfen?
Gruß Ulli
Folgend der Code
Option Explicit
Public gblnCancel As Boolean
Sub Speichern_Makro()
' Speichern Makro
gblnCancel = False
ThisWorkbook.SaveAs Filename:=ThisWorkbook.Path & "\" & Range("M1").Value & _
Format$(Range("H1").Value, "000") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
ThisWorkbook.Sheets("Protokoll").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
ThisWorkbook.Path & "\" & Range("M1").Value & _
Format$(Range("H1").Value, "000") & ".pdf", Quality:=xlQualityStandard, _
IncludeDocProperties:=True, IgnorePrintAreas:=False, _
OpenAfterPublish:=False
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

20
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern in neuen Ordner
19.12.2020 18:31:44
Nepumuk
Hallo Ulli,
so:
Option Explicit

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

Public gblnCancel As Boolean

Sub Speichern_Makro()
    '
    ' Speichern Makro
    '
    
    Dim strPathWb As String, strPathPDF As String
    
    gblnCancel = False
    
    strPathWb = ThisWorkbook.Path & "\Makro\"
    strPathPDF = ThisWorkbook.Path & "\PDF\"
    
    Call MakeSureDirectoryPathExists(strPathWb)
    Call MakeSureDirectoryPathExists(strPathPDF)
    
    ThisWorkbook.SaveAs Filename:=strPathWb & Range("M1").Value & _
        Format$(Range("H1").Value, "000") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    ThisWorkbook.Sheets("Protokoll").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        strPathPDF & Range("M1").Value & _
        Format$(Range("H1").Value, "000") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    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ß
Nepumuk
Anzeige
AW: Speichern in neuen Ordner
19.12.2020 18:41:32
Ulrich
Hallo Nepumuk,
da ist ein kleiner Fehler:
Er öffnet jetzt die Neue .xlsm Datei und bringt folgenden Fehler:
Gruß Ulli
Userbild
AW: Speichern in neuen Ordner
19.12.2020 18:44:17
Nepumuk
Hallo Ulli,
welche Zeile markiert der Debugger?
Gruß
Nepumuk
AW: Speichern in neuen Ordner
19.12.2020 18:46:42
Ulrich
Hallo Nepumuk,
zeile 33
Workbooks.Open ThisWorkbook.Path & "\Protokoll.xlsm"
Die Ursprung "Protokoll"Datei soll ja wieder geöffnet werden.
Gruß Ulli
AW: Speichern in neuen Ordner
19.12.2020 18:50:42
Nepumuk
Hallo Ulli,
dann so:
Option Explicit

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

Public gblnCancel As Boolean

Sub Speichern_Makro()
    '
    ' Speichern Makro
    '
    
    Dim strPathWb As String, strPathPDF As String, strPath As String
    
    gblnCancel = False
    
    strPath = ThisWorkbook.Path & "\"
    strPathWb = strPath & "Makro\"
    strPathPDF = strPath & "PDF\"
    
    Call MakeSureDirectoryPathExists(strPathWb)
    Call MakeSureDirectoryPathExists(strPathPDF)
    
    ThisWorkbook.SaveAs Filename:=strPathWb & Range("M1").Value & _
        Format$(Range("H1").Value, "000") & ".xlsm", FileFormat:=xlOpenXMLWorkbookMacroEnabled
    ThisWorkbook.Sheets("Protokoll").ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        strPathPDF & Range("M1").Value & _
        Format$(Range("H1").Value, "000") & ".pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
    
    If Not gblnCancel Then
        
        Workbooks.Open strPath & "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ß
Nepumuk
Anzeige
AW: Speichern in neuen Ordner
19.12.2020 18:54:22
Ulrich
Hallo Nepumuk,
SUPER !! Herzlichen Dank.
Gruß Ulli
AW: Speichern in neuen Ordner
19.12.2020 19:09:59
Ulrich
Hallo Nepumuk,
noch eine ganz kurze Frage.
Ich habe ja noch ein weiteres Makro "Speichern" welches die Datei ohne Makros speichert.
Dies habe ich jetzt in dem Code mit
Call Speichern
am Ende ergänzt. Aber die Datei wird nicht erzeugt.
Hast du eine Idee?
Gruß Ulli
AW: Speichern in neuen Ordner
19.12.2020 19:12:20
Nepumuk
Hallo Ulli,
nach "ThisWorkbook.Close SaveChanges:=True"?
Gruß
Nepumuk
AW: Speichern in neuen Ordner
19.12.2020 19:14:48
Ulrich
Hallo Nepumuk,
ja, danach.
Gruß Ulli
AW: Speichern in neuen Ordner
19.12.2020 19:16:19
Nepumuk
Hallo Ulli,
danach wird kein Code mehr ausgeführt da die Mappe zu ist.
Gruß
Nepumuk
Anzeige
AW: Speichern in neuen Ordner
19.12.2020 19:21:33
Ulrich
Hallo Nepumuk,
gibt es in dem Code den eine Zeile vorher wo diese Makro mit gestartet werden kann.
Ich bin mit mehreren Versuchen gescheitert.
Gruß Ulli
AW: Speichern in neuen Ordner
19.12.2020 19:40:22
Ulrich
Hallo Nepumuk,
ich denke das wird nicht funktionieren da beide Makros wieder die Protokolldatei aufrufen.
Der Aufruf der Protokolldatei müsste dann wahrscheinlich hier herausgenommen werden?
Also nur speichern ohne Makros ohne erneutes aufrufen der Protokolldatei, dies würde ja dann das andere Makro zum Ende hin machen. ....vielleicht
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")
Call Tabelle1.Protect(Password:="4711", UserInterfaceOnly:=True)
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 & _
Format$(.Range("H1").Value, "000") & ".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

Anzeige
AW: Speichern in neuen Ordner
19.12.2020 19:46:12
Nepumuk
Hallo Ulli,
ja, diese:
Application.DisplayAlerts = False
Call ThisWorkbook.SaveAs(Filename:=Environ$("TEMP") & "\Temp.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled)
Application.DisplayAlerts = True
Call Workbooks.Open(Filename:=strPath & "Protokoll.xlsm")
Call ThisWorkbook.Close(SaveChanges:=False)
Gruß
Nepumuk
SaveCopyAs ? oT
19.12.2020 19:49:40
Yal
AW: SaveCopyAs ? oT
19.12.2020 19:51:26
Nepumuk
Hallo Yal,
damit kannst du eine xlsm nicht als xlsx speichern.
Gruß
Nepumuk
AW: SaveCopyAs ? oT
19.12.2020 19:57:00
Ulrich
Grandios!!
Ganz Herzlichen Dank.
Gruß Ulli
AW: Speichern in neuen Ordner
20.12.2020 13:37:07
Ulrich
Hallo Nepumuk,
ich habe noch eine Frage zu einem Code den du mir erstellt hast.
Ich speichere Fotos mit der webcam in definierte Zellen mit z.B. folgenden code.
Public Sub NewPhoto5()
With UserForm1
Set .Range = Range("Foto5")
Call .Show
End With
End Sub
Jetzt würde ich gerne das Foto in einer beliebigen "AKtiven Zelle" (nicht wie hier vorgegeben in Zelle "Foto5") einfügen. Ich möchte das Makro mit einem Tastenkürzel aufrufen.
Habe schon einiges mit ActiveCell versucht, bekomme es aber nicht hin.
Hast du noch einen Tipp für mich?
Ich hoffe es ist nur eine Kleinigkeit.
Ich weis nicht ob folgendes auch noch angepasst werden muss.
Gruß Ulli
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()
'ActiveSheet.Unprotect
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
'ActiveSheet.Protect
End Sub

Private Sub CommandButton4_Click()
mblnStop = True
Call CloseCamera
Call Unload(Object:=UserForm2)
Call Unload(Object:=Me)
Call Tabelle1.Protect(Password:="4711", UserInterfaceOnly:=True) ' neu 09.12.2020
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
Anzeige
AW: Speichern in neuen Ordner
20.12.2020 13:44:36
Nepumuk
Hallo Ulli,
so:
Set .Range = ActiveCell.MergeArea

Gruß
Nepumuk
AW: Speichern in neuen Ordner
20.12.2020 13:58:32
Ulrich
Hallo Nepumuk,
klasse!
Wieder ganz herzlichen Dank!
Gruß Ulli

80 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige
Anzeige

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige