Betrifft: blatt wird umbenannt
von: joerg
Geschrieben am: 25.01.2010 13:56:45
Hallo,
habe noch ein (kleineres) Problem: Und zwar muss ich öfter mal Blätter als .txt exportieren / speichern. Wenn ich das aber tue, benennt Excel den tab / das Blatt automatisch um in den Dateinamen, den ich dem txt-file gegeben habe...
(Das ist recht nervig - die txt-files müssen nämlich immer denselben Namen haben, weil ich sie anderswo importiere, so dass ich wirklich gewzungen bin, die Tabs von Hand immer wieder zurückzubenennen...)
Ich verstehe auch wirklich nicht, warum Excel das überhaupt macht, was für ein Unsinn! Kann man das irgendwo ausschalten?
Betrifft: was für ein Unsinn!
von: Rudi Maintaire
Geschrieben am: 25.01.2010 14:09:16
Hallo,
kein Unsinn.
In .txt-Dateien gibt es ja gar keine Worksheets.
weil ich sie anderswo importiere
Betrifft: AW: was für ein Unsinn!
von: joerg
Geschrieben am: 25.01.2010 14:33:14
Doch Unsinn - mir ist ja völlig klar, dass txt-dateien keine Worksheets unterstützen, ich will ja auch nix weiter als eben das aktive Blatt in ein txt-file speichern / exportieren -
Dass Excel dann das Worksheet umbenennt, weil dieses dann 'nicht mehr zu meinem Workbook gehört' (oder so) finde ich einfach unsinnig.
Nicht per VBA übrigens, sondern in ein InDesign-Dokument...
Gibt es vielleicht per VBA-Script eine Lösung, um die Daten zu exportieren ohne das Blatt umzubenennen?
Betrifft: AW: blatt wird umbenannt
von: Tino
Geschrieben am: 25.01.2010 14:13:41
Hallo,
ich nehme mal an Du machst dies über speichern unter, oder?
Dann ist die Datei nicht mehr Deine Excel- Datei.
Mach es z. Bsp. so, kopier die Tabelle als neue Arbeitsmappe und speichere diese als Textdatei,
damit sollte die Excel- Datei so bleiben.
Gruß Tino
Betrifft: AW: blatt wird umbenannt
von: joerg
Geschrieben am: 25.01.2010 14:34:23
*stöhn* Wie uuumstäändlich... zumal ich das regelmässig und ziemlich oft machen muss... aber gut, wahrscheinlich geht's eben nicht anders. :) Danke!
Betrifft: AW: blatt wird umbenannt
von: Tino
Geschrieben am: 25.01.2010 14:42:23
Hallo,
Du kannst es auch mittels Button und einem kleinen VBA Code machen.
Sub Makro1() Dim sZiel As String Dim oWB As Workbook sZiel = Application.GetSaveAsFilename("test", "Textdateien (*.txt), *.txt") If sZiel <> CStr(False) Then Application.ScreenUpdating = False Set oWB = Sheets("Tabelle1").Copy oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False Application.ScreenUpdating = True End If End SubGruß Tino
Betrifft: Korrektur ...
von: Tino
Geschrieben am: 25.01.2010 14:44:57
Hallo,
so ist es besser.
Sub Makro1() Dim sZiel As String Dim oWB As Workbook sZiel = Application.GetSaveAsFilename("test", "Textdateien (*.txt), *.txt") If sZiel <> CStr(False) Then Application.ScreenUpdating = False Sheets("Tabelle1").Copy Set oWB = ActiveWorkbook oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False Application.ScreenUpdating = True End If End SubGruß Tino
Betrifft: AW: Korrektur ...
von: joerg
Geschrieben am: 25.01.2010 17:37:39
Wow, super, das funktioniert! Könnte man es noch irgendwie hinkriegen, dass gar nicht erst die Dialogbox kommt, sondern immer einfach unter dem Namen ('test.txt') gespeichert wird, so dass die schon vorhandene Datei auch ohne Nachfragen überschrieben wird? Das wäre optimal...
Vielen Dank! :)
Betrifft: AW: Korrektur ...
von: joerg
Geschrieben am: 25.01.2010 17:43:39
Eine Sache fällt mir noch ein: Und zwar ist die data-merge-funktion in InDesign etwas dämlich gemacht, so dass ich in meinen Excel-Tabellen eine Hilfs-Zeile brauche, nämlich Zeile 1. Die ist in Excel ausgeblendet, ich brauche sie aber in InDesign. Zeile 2 wiederum enthält Spaltenüberschriften, die ich in InDesign eigentlich nicht brauche... Könnte man irgendwie dafür sorgen, dass nur die Zeilen 1 und 3-n aus der Tabelle in das textfile geschrieben werden? Also alles bis auf Zeile 2?
Betrifft: müsste so gehen
von: Tino
Geschrieben am: 25.01.2010 17:45:11
Hallo,
so müsste im Odner der Exceldatei die TxT Datei ohne Rückfrage erstellt werden.
Sub Makro1() Dim sZiel As String Dim oWB As Workbook Dim strPath As String sZiel = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") sZiel = sZiel & "Meine Textdatei.txt" 'Dateiname If sZiel <> CStr(False) Then With Application .ScreenUpdating = False .DisplayAlerts = False Sheets("Tabelle1").Copy Set oWB = ActiveWorkbook oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False .ScreenUpdating = True .DisplayAlerts = True End With End If End SubGruß Tino
Betrifft: AW: müsste so gehen
von: joerg
Geschrieben am: 25.01.2010 18:01:10
Jo, klappt! noch eine letzte Kleinigkeit, kann man irgendwie statt dem ganzen Workbook nur Bereiche davon speichern? Nicht nur dass, was ich oben schon geschrieben hatte, sondern es wäre auch super wenn die momentane Filterung berücksichtigt würde, also eigentlich, wenn nur das gespeichert werden würde, was grad auch angezeigt wird... geht das?
Betrifft: AW: müsste so gehen
von: Tino
Geschrieben am: 25.01.2010 18:15:58
Hallo,
dafür müssen wir ein klein wenig mehr machen.
Müsste funktionieren.
Sub Makro1() Dim sZiel As String Dim oWB As Workbook Dim rngQuelle As Range Dim strPath As String sZiel = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") sZiel = sZiel & "Meine Textdatei.txt" 'Dateiname If sZiel <> CStr(False) Then With Application .ScreenUpdating = False .DisplayAlerts = False 'Tabellenname anpassen hier Tabelle1 Set rngQuelle = ThisWorkbook.Sheets("Tabelle1").Cells.SpecialCells(xlCellTypeVisible) Set oWB = Workbooks.Add(Template:=1) rngQuelle.Copy oWB.Sheets(1).Cells(1, 1) oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False .ScreenUpdating = True .DisplayAlerts = True End With End If End SubGruß Tino
Betrifft: AW: müsste so gehen
von: joerg
Geschrieben am: 25.01.2010 18:24:56
Naja, so halb - die weggefilterten Zeilen werden nicht exportiert.... dafür werden, glaube ich, auch alle leeren Zeilen mitexportiert... Jedenfalls ist das txt-file, das vorher 24 KB gross war, 47MB gross, und es hat darin viel, viiiiel leeren Platz... :)
Betrifft: AW: müsste so gehen
von: Tino
Geschrieben am: 25.01.2010 18:35:52
Hallo,
dann stimmt was mit Deiner Tabelle nicht oder ist nicht sauber aufgebaut.
Können wir die letzte Zeile anhand einer Referenzspalte festmachen?
Müsste so funktionieren.
Option Explicit Sub Makro1() Dim sZiel As String Dim oWB As Workbook Dim rngQuelle As Range Dim strPath As String Dim booVisible As Boolean Dim lngLetzte As Long sZiel = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") sZiel = sZiel & "Meine Textdatei.txt" 'Dateiname If sZiel <> CStr(False) Then With Application .ScreenUpdating = False .DisplayAlerts = False 'Tabellennamen anpassen With ThisWorkbook.Sheets("Tabelle1") 'hier Referenzspalte anpassen, 1=Sp. A ; 2 = Sp. B usw... *********************** lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row Set rngQuelle = .Range("A1", .Cells(lngLetzte, .Columns.Count)) booVisible = .Rows(2).Hidden .Rows(2).Hidden = True Set rngQuelle = rngQuelle.SpecialCells(xlCellTypeVisible) Set oWB = Workbooks.Add(Template:=1) rngQuelle.Copy oWB.Sheets(1).Cells(1, 1) oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False .Rows(2).Hidden = booVisible End With .ScreenUpdating = True .DisplayAlerts = True End With End If End Sub
Betrifft: AW: müsste so gehen
von: joerg
Geschrieben am: 25.01.2010 18:42:56
Hm, das kapier ich nicht so ganz - die letzte Zeile anhand einer Referenzspalte?
Also der Teil hier:
lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row Set rngQuelle = .Range("A1", .Cells(lngLetzte, .Columns.Count))
Betrifft: AW: müsste so gehen
von: Tino
Geschrieben am: 25.01.2010 18:57:46
Hallo,
ja um diese Zeilen geht es.
lngLetzte = .Cells(.Rows.Count, 1).End(xlUp).Row
Also .Rows.Count ist die letzte Zeile, die 1 die Spalte also Spalte A. (2 wäre Spalte B usw.)
Es wird also von der letzen Zelle in Spalte A nachgesehen wo der letzte Eintrag in Spalte A steht.
Gruß Tino
Betrifft: ach Deine Zeile 2 habe ich noch nicht ...
von: Tino
Geschrieben am: 25.01.2010 18:22:59
Hallo,
Sub Makro1() Dim sZiel As String Dim oWB As Workbook Dim rngQuelle As Range Dim strPath As String Dim booVisible As Boolean sZiel = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") sZiel = sZiel & "Meine Textdatei.txt" 'Dateiname If sZiel <> CStr(False) Then With Application .ScreenUpdating = False .DisplayAlerts = False With ThisWorkbook.Sheets("Tabelle1") booVisible = .Rows(2).Hidden .Rows(2).Hidden = True Set rngQuelle = .Cells.SpecialCells(xlCellTypeVisible) Set oWB = Workbooks.Add(Template:=1) rngQuelle.Copy oWB.Sheets(1).Cells(1, 1) oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False .Rows(2).Hidden = booVisible End With .ScreenUpdating = True .DisplayAlerts = True End With End If End SubGruß Tino
Betrifft: AW: ach Deine Zeile 2 habe ich noch nicht ...
von: joerg
Geschrieben am: 25.01.2010 18:55:37
Ah, alles klar, es lag an den Formaten... habe jetzt die formate der unteren x-millionen leeren zellen gelöscht, jetzt funktioniert es wie es soll...
Jedenfalls fast: Das mit zeile 1 und Zeile 2 ist noch nicht ganz richtig, im Text-file landet nämlich keine von beiden. Es ist aber ja so, dass ich Zeile 2 für die Anzeige brauche, nicht im txtfile, zeile 1 genau andersrum, die soll exportiert werden, ist aber ausgeblendet...
Betrifft: AW: ach Deine Zeile 2 habe ich noch nicht ...
von: joerg
Geschrieben am: 25.01.2010 18:58:31
Alles klar, hab's selbst hingekriegt, mit .Rows(1).Hidden...
Vielen Dank für Deine grosse Hilfe, jetzt ist es wirklich perfekt! :)
Betrifft: AW: ach Deine Zeile 2 habe ich noch nicht ...
von: Tino
Geschrieben am: 25.01.2010 19:04:40
Hallo,
ok. habe verstanden das nur Zeile 2 ausgeblendet werden muss.
Mit diesem Code wird Zeile 2 ausgeblendet und Zeile 1 eingeblendet,
danach wird alles zurückgestellt wie es war.
Sub Makro1() Dim sZiel As String Dim oWB As Workbook Dim rngQuelle As Range Dim strPath As String Dim booVisible(1) As Boolean sZiel = IIf(Right$(ThisWorkbook.Path, 1) = "\", ThisWorkbook.Path, ThisWorkbook.Path & "\") sZiel = sZiel & "Meine Textdatei.txt" 'Dateiname If sZiel <> CStr(False) Then With Application .ScreenUpdating = False .DisplayAlerts = False With ThisWorkbook.Sheets("Tabelle1") 'Zeile 1 einblenden booVisible(0) = .Rows(1).Hidden .Rows(1).Hidden = False ''Zeile 2 ausblenden booVisible(1) = .Rows(2).Hidden .Rows(2).Hidden = True Set rngQuelle = .Cells.SpecialCells(xlCellTypeVisible) Set oWB = Workbooks.Add(Template:=1) rngQuelle.Copy oWB.Sheets(1).Cells(1, 1) oWB.SaveAs Filename:=sZiel, FileFormat:=xlUnicodeText, CreateBackup:=False oWB.Close False 'Zeile 1 Visible zurückstellen .Rows(1).Hidden = booVisible(0) 'Zeile 2 Visible zurückstellen .Rows(2).Hidden = booVisible(1) End With .ScreenUpdating = True .DisplayAlerts = True End With End If End SubGruß Tino