Microsoft Excel

Herbers Excel/VBA-Archiv

blatt wird umbenannt | Herbers Excel-Forum


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

Wie? per VBA?--> Bezug auf Sheets(1)

Gruß
Rudi


  

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 Sub
Gruß 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 Sub
Gruß 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 Sub
Gruß 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 Sub
Gruß 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

Gruß Tino


  

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))

Wie müsste ich den anpassen?


  

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 Sub
Gruß 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 Sub
Gruß Tino