Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender

Forumthread: Dateiname zum Speichern aus Zelle anderer Tabelle

Dateiname zum Speichern aus Zelle anderer Tabelle
13.02.2019 10:16:20
Ralf
Hallo liebes Forum,
ich habe folgendes Problem:
Tabelle A ist meine Arbeitstabelle mit den Makros.
Ich habe in Tabelle A, Blatt A Zellen, die ich zuerst filtern und dann die gefilterte und aufbereitete Auswahl kopieren möchte. Funktioniert auch.
Die Kopie wird in eine neue Tabelle B eingefügt und soll jetzt aber mit einem Zellinhalt aus Tabelle A als Dateiname gespeichert werden... aber aktiv ist ja Tabelle B, die ja auch gespeichert werden soll. Ich komme leider nicht weiter - könnte mir jemand weiterhelfen?
Nicht wundern, das Makro wurde teils durch click und play erstellt oder zusammenkopiert.
vorab: Inhalt H6 z.B. 03/2019
-----
' Filtern der Ergebnisse
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Sheets("sb_BERICHTE").Select
Cells.Select
Selection.AutoFilter
ActiveSheet.Range("A:I").AutoFilter Field:=6, Criteria1:="0001-01"
ActiveSheet.Range("A:I").AutoFilter Field:=8, Criteria1:=""
ActiveSheet.Range("A:I").AutoFilter Field:=4, Criteria1:=""
ActiveSheet.Range("A:I").AutoFilter Field:=9, Criteria1:="="
ActiveWorkbook.Worksheets("sb_BERICHTE").AutoFilter.Sort.SortFields.Clear
ActiveWorkbook.Worksheets("sb_BERICHTE").AutoFilter.Sort.SortFields.Add Key:= _
Range("C:C"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption _
:=xlSortNormal
With ActiveWorkbook.Worksheets("sb_BERICHTE").AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
'Sichtbare Ergebnisse kopieren und in neue Mappe einfügen
Range("A:H").SpecialCells(xlCellTypeVisible).Copy
Workbooks.Add
ActiveSheet.Paste
Application.CutCopyMode = False
ActiveSheet.Range("F:G,I:I").Select
Selection.Delete Shift:=xlToLeft
ActiveSheet.Range("A:F").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6 _
), Header:=xlYes
ChDir "M:\Dokumente\xxx\Daten aufbereitet"
ActiveWorkbook.SaveAs Filename:= _
"M:\Dokumente\xxx\Daten aufbereitet\yyy.xlsx ", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
ActiveWindow.Close SaveChanges:=True
Cells.Select
Selection.AutoFilter
Sheets("Arbeitsblatt").Select
-----
Ein Einfügen von
-----
ActiveWorkbook.SaveAs Filename:= _
"M:\Dokumente\xxx\Daten aufbereitet\yyy" & Sheets("Arbeitsblatt").Range("H6").Value & ".xlsx ", FileFormat _
:=xlOpenXMLWorkbook, CreateBackup:=False
-----
endet leider mit einem Laufzeitfehler...
Tabelle A hat einen Blattschutz aktiv über H6.
Bin dankbar für jede Hilfe :)
Anzeige

4
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Dateiname zum Speichern aus Zelle anderer Tabelle
13.02.2019 10:57:35
Bernd
Servus Ralf,
mal dienen Code etwas aufbereitet aber ungetestet...

Sub test()
Dim wb As Workbook
Dim ws As Worksheet
Dim wb2 As Workbook
Dim ws2 As Worksheet
Application.DisplayAlerts = False
Application.ScreenUpdating = False
Set wb = ThisWorkbook
Set ws = wb.Sheets("sb_BERICHTE")
With ws.Cells
.AutoFilter
.AutoFilter field:=6, Criteria1:="0001-01"
.AutoFilter field:=8, Criteria1:=""
.AutoFilter field:=4, Criteria1:=""
.AutoFilter field:=9, Criteria1:="="
.AutoFilter.Sort.SortFields.Clear
.AutoFilter.Sort.SortFields.Add Key:=Range("C:C"), SortOn:=xlSortOnValues, Order:= _
xlAscending, DataOption:=xlSortNormal
With .AutoFilter.Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End With
With ws
.Range("A:H").SpecialCells(xlCellTypeVisible).Copy
Set wb2 = Workbooks.Add
Set ws2 = wb2.Sheets(1)
With ws2
.Paste
Application.CutCopyMode = False
.Range("F:G,I:I").Delete shift:=xlToLeft
.Range("A:F").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes
End With
wb2.SaveAs Filename:="M:\Dokumente\xxx\Daten aufbereitet\" & wb.Sheets("Arbeitsblatt"). _
Range("H6").Value & ".xlsx ", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
wb2.Close False
.AutoFilter
End With
wb.Sheets("Arbeitsblatt").Select
Application.DisplayAlerts = True
Application.ScreenUpdating = True
Set wb = Nothing
Set wb2 = Nothing
Set ws = Nothing
Set ws2 = Nothing
End Sub

Für weitere Hilfe lade bitte deine Datei hoch...
Grüße, Bernd
Anzeige
AW: Dateiname zum Speichern aus Zelle anderer Tabelle
13.02.2019 11:49:40
Ralf
Danke für die Hilfe,
leider kommt ein Laufzeitfehler 424: Objekt erforderlich bei:
With ws.Cells
.AutoFilter
.AutoFilter field:=6, Criteria1:="0001-01"
.AutoFilter field:=8, Criteria1:=""
.AutoFilter field:=4, Criteria1:=""
.AutoFilter field:=9, Criteria1:="="
.AutoFilter.Sort.SortFields.Clear.AutoFilter.Sort.SortFields.Clear
Hier mal meine Ausgangsdatei:
https://www.herber.de/bbs/user/127617.xlsm
Anzeige
AW: Dateiname zum Speichern aus Zelle anderer Tabelle
13.02.2019 14:05:35
Karl-Heinz
Hallo Ralf,
da ist Dir wohl ein Übernahmefehler reingeraten:
.AutoFilter.Sort.SortFields.Clear.AutoFilter.Sort.SortFields.Clear
ist doppelt und kann so nicht funktionieren. Nur das fette berücksichtigen.
viele Grüße
Karl-Heinz
AW: Dateiname zum Speichern aus Zelle anderer Tabelle
14.02.2019 09:31:23
Ralf
Danke für den Hinweis, aber im Makro ist alles korrekt...
Ich habe mir nun beholfen, indem ich per VBA eine Funktion aus der Ursprungstabelle in die aktive Tabelle mitkopiere, die mir den Dateinamen hergibt.
Trotzdem vielen Dank für die Hilfe!
Anzeige

Forumthreads zu verwandten Themen

Anzeige
Anzeige
Anzeige
Anzeige
Anzeige

Infobox / Tutorial

Dateiname aus Zelle in Excel übernehmen


Schritt-für-Schritt-Anleitung

Um einen Dateinamen aus einer Zelle in einer anderen Tabelle zu übernehmen, kannst Du folgendes VBA-Makro verwenden. Dieses Beispiel geht davon aus, dass Du in Excel arbeitest und eine Zelle, beispielsweise H6, als Dateinamen verwenden möchtest:

Sub SpeichernMitDateiname()
    Dim wb As Workbook
    Dim ws As Worksheet
    Dim wb2 As Workbook
    Dim ws2 As Worksheet
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    Set wb = ThisWorkbook
    Set ws = wb.Sheets("sb_BERICHTE")

    ' Filtere die Ergebnisse
    ws.Cells.AutoFilter
    ws.Cells.AutoFilter Field:=6, Criteria1:="0001-01"
    ws.Cells.AutoFilter Field:=8, Criteria1:=""
    ws.Cells.AutoFilter Field:=4, Criteria1:=""
    ws.Cells.AutoFilter Field:=9, Criteria1:="="

    ' Kopiere sichtbare Zellen in eine neue Arbeitsmappe
    ws.Range("A:H").SpecialCells(xlCellTypeVisible).Copy
    Set wb2 = Workbooks.Add
    Set ws2 = wb2.Sheets(1)
    ws2.Paste
    Application.CutCopyMode = False

    ' Lösche nicht benötigte Spalten und entferne Duplikate
    ws2.Range("F:G,I:I").Delete Shift:=xlToLeft
    ws2.Range("A:F").RemoveDuplicates Columns:=Array(1, 2, 3, 4, 5, 6), Header:=xlYes

    ' Speichere die neue Arbeitsmappe mit dem Namen aus der Zelle H6
    wb2.SaveAs Filename:="M:\Dokumente\xxx\Daten aufbereitet\" & wb.Sheets("Arbeitsblatt").Range("H6").Value & ".xlsx", FileFormat:=xlOpenXMLWorkbook
    wb2.Close False
    Application.DisplayAlerts = True
    Application.ScreenUpdating = True
End Sub

Häufige Fehler und Lösungen

  • Laufzeitfehler 424: Objekt erforderlich
    Dieser Fehler tritt häufig auf, wenn Du versuchst, auf ein Objekt zuzugreifen, das nicht existiert oder nicht korrekt referenziert ist. Überprüfe, ob die Blattnamen und Zellreferenzen in Deinem Makro korrekt sind. Achte darauf, dass Du nicht versehentlich doppelte Codezeilen hast, wie z.B. .AutoFilter.Sort.SortFields.Clear.

  • Makro speichert nicht richtig
    Stelle sicher, dass der angegebene Pfad korrekt ist und dass Du die notwendigen Berechtigungen hast, um in diesem Verzeichnis zu speichern.


Alternative Methoden

Wenn Du kein VBA nutzen möchtest, kannst Du auch manuell den Dateinamen aus einer Zelle kopieren und beim Speichern der Datei einfügen. Dies ist jedoch nicht automatisiert und weniger effizient, besonders wenn Du häufig die Datei speicherst.


Praktische Beispiele

  1. Beispiel 1: Du möchtest den Dateinamen basierend auf dem Datum in Zelle H6 speichern. Verwende den folgenden Code und passe den Pfad sowie die Zellreferenz entsprechend an.

  2. Beispiel 2: Wenn Du aus einem Textfeld in Word einen Dateinamen generieren möchtest, könnte der Code ähnlich aussehen, jedoch musst Du das Word-Objektmodell verwenden.


Tipps für Profis

  • Verwende Fehlerbehandlung in Deinem VBA-Code, um sicherzustellen, dass Dein Makro robuster ist und auch bei Fehlern sanft abbricht.
  • Halte Deinen Code sauber und gut kommentiert, um die Wartung zu erleichtern. Füge Kommentare hinzu, die erklären, was jeder Abschnitt des Codes tut.
  • Experimentiere mit Variablen, um den Code flexibler und anpassungsfähiger zu gestalten.

FAQ: Häufige Fragen

1. Wie kann ich den Dateinamen aus einer Zelle automatisch aktualisieren?
Du kannst ein VBA-Makro verwenden, das beim Speichern der Datei automatisch den aktuellen Zellinhalt ausliest und als Dateiname nutzt.

2. Was kann ich tun, wenn der Dateiname ungültige Zeichen enthält?
Ersetze ungültige Zeichen (z.B. /, \, :, *, ?, ", <, >, |) durch einen Unterstrich oder ein anderes zulässiges Zeichen, bevor Du den Dateinamen speicherst.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige