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

Speichern nur sichtbarer Spalten

Forumthread: Speichern nur sichtbarer Spalten

Speichern nur sichtbarer Spalten
25.08.2006 12:37:40
Obler
Hallo,
ich verwende eine Preisliste mit mehreren Arbeitsblättern zum kalkulieren. Beim verschicken der Preisliste sollen aber nicht alle Spalten enthalten sein (interne Berechnungen). Möchte aber nicht den passwortschutz verwenden, nicht sicher genug!
Deshalb würde ich gerne alle arbeitsbätter mit nur den sichtbaren Spalten in einem neuen excel file abspeichern?
Hat irgenwer eine idee
Anzeige

11
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Speichern nur sichtbarer Spalten
25.08.2006 14:51:17
fcs
Hallo Obler,
geht am besten per Makro.
Als erstes Datei ggf. speichern, dann im Blatt alle Formeln durch Werte ersetzen (falls erforderlich), dann Preisliste in neue Datei kopieren und die ausgeblendeten Spalten löschen oder alle Spalten einblenden und die gewünschten Spalten löschen.
Gruß
Franz
Beispiel-Makro:

Sub preisliste()
'Kopiert Tabelle in neue Arbeitsmappe, nur Werte, ausgeblendete Spalten werden gelöscht
Dim wbThis As Workbook, wbPreis As Workbook, wksPreis As Worksheet, Spalte As Integer
Set wbThis = ThisWorkbook
Set wksPreis = wbThis.Worksheets("Preisliste") 'Tabelle die kopiert werden soll
' Datei Speichenrn falls nicht gespeichert
If wbThis.Saved = False Then
wbThis.Save
End If
wksPreis.UsedRange.Value = wksPreis.UsedRange.Value 'Formeln durch werte ersetzen
wksPreis.Copy 'Blatt in neue Arbeitsmappe kopieren
Set wbPreis = ActiveWorkbook
Set wksPreis = wbPreis.Worksheets(1)
With wksPreis
'Ausgeblendete Spalten löschen
For Spalte = .UsedRange.Column + .UsedRange.Columns.Count To 1 Step -1
If .Columns(Spalte).Hidden = True Then .Columns(Spalte).Delete
Next
'Alle Spalten einblenden
.Cells.EntireColumn.Hidden = False
End With
Application.Dialogs(xlDialogSaveAs).Show
'Datei mit Originaldaten schließen ohne zu speichern
wbThis.Close savechanges:=False
End Sub

Anzeige
AW: Speichern nur sichtbarer Spalten
28.08.2006 08:24:58
Gerhard
Hallo Franz
danke funktioniert super. Vielen Dank für die schnelle Lösung
Gerhard
AW: Speichern nur sichtbarer Spalten
28.08.2006 09:31:05
Gerhard
Hallo Franz,
Wie kann man dein macro noch erweitern das gleichzeitig "mehrere Arbeitsblätter" exportiert werden?
Vielen Dank im voraus
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
28.08.2006 11:15:52
fcs
Hallo Gerhard,
möchtest du aus einer Arbeitsmappe (Excel-Datei) mehrere Tabellenblätter auf diese Weise in eine neue Datei kopieren?
Oder soll aus mehreren Arbeitsmappen(Excel-Dateien) eine bestimmte Tabelle so in eine einzige neue Datei kopiert werden?
Gruß
Franz
Anzeige
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
28.08.2006 13:27:07
Gerhard
Hallo Franz,
Ja, ich möchte aus einer Arbeitsmappe (Excel-Datei) mehrere Tabellenblätter auf diese Weise in eine neue Datei kopieren!
Vielen Dank in voraus,
PS: Hab übrigens auf Basis deines Codes weitergearbeitet bin aber gescheitert. Meine VB Kenntnisse sind einfach zu gering. Auch der Macrorecorder brachte keinen Erfolg.
Anzeige
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
28.08.2006 14:14:42
fcs
Hi,
die Anpassung für mehrere Tabellen sieht so aus:

Sub BlattCopyNurSichtbareSpalten()
'Kopiert Tabellen in neue Arbeitsmappe, nur Werte, ausgeblendete Spalten werden gelöscht
Dim wbThis As Workbook, wbNeu As Workbook, wks As Worksheet, Spalte As Integer
Dim Blatt As Variant, I As Integer
Set wbThis = ThisWorkbook
' Datei Speichern falls nicht gespeichert
If wbThis.Saved = False Then
wbThis.Save
End If
Blatt = Array("Preisliste", "Tabelle1", "Tabelle2") 'Namen der Blätter, die Kopiert werden sollen
'Blatt = Array(1,3,5) 'Alternative mit Nummern der Blätter
For I = 0 To UBound(Blatt)
Set wks = wbThis.Worksheets(Blatt) 'Tabelle die kopiert werden soll
wks.UsedRange.Value = wks.UsedRange.Value 'Formeln durch Werte ersetzen
If I = 0 Then
wks.Copy 'Blatt in neue Arbeitsmappe kopieren
Set wbNeu = ActiveWorkbook
Else
'Blatt am Ende der neuen Arbeitsmappe einfügen
wks.Copy After:=wbNeu.Sheets(wbNeu.Sheets.Count)
End If
Set wks = wbNeu.Worksheets(wbNeu.Sheets.Count)
With wks
'Ausgeblendete Spalten löschen
For Spalte = .UsedRange.Column + .UsedRange.Columns.Count To 1 Step -1
If .Columns(Spalte).Hidden = True Then .Columns(Spalte).Delete
Next
'Alle Spalten einblenden
.Cells.EntireColumn.Hidden = False
End With
Next
Application.Dialogs(xlDialogSaveAs).Show
'Datei mit Originaldaten schließen ohne zu speichern
wbThis.Close savechanges:=False
End Sub

Du muss nur die Liste der Tabellen-Namen anpassen/ergänzen.
Gruß
Franz
Anzeige
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
28.08.2006 16:12:24
Gerhard
Hallo Franz,
bekomme leider bei
Set wks = wbThis.Worksheets(Blatt) 'Tabelle die kopiert werden soll
einen Laufzeitfehler #13, Typen unverträglich
Hier meine konfiguration!

Private Sub CommandButton1_Click()
'Kopiert Tabellen in neue Arbeitsmappe, nur Werte, ausgeblendete Spalten werden gelöscht
Dim wbThis As Workbook
Dim wbNeu As Workbook
Dim wks As Worksheet
Dim Spalte As Integer
Dim Blatt As Variant
Dim I As Integer
Set wbThis = ThisWorkbook
' Datei Speichern falls nicht gespeichert
If wbThis.Saved = False Then
wbThis.Save
End If
Blatt = Array("eCopy SSOP 3.1", "uniFLOW direct", "uniFLOW dealer", _
"Equitrac Office 3.0", "PAS + Pagerouter", "NSA MEAP", "NSA", "iW Publishing Man.", _
"Callisto", "BTA V3.6", "BTA Gold V3.6", "UGW", "Unix Linux driver", "OS400 driver", _
"ADOS b25") 'Namen der Blätter, die Kopiert werden sollen
'Blatt = Array(1, 3, 5) 'Alternative mit Nummern der Blätter
For I = 0 To UBound(Blatt)
Set wks = wbThis.Worksheets(Blatt) 'Tabelle die kopiert werden soll
wks.UsedRange.Value = wks.UsedRange.Value 'Formeln durch Werte ersetzen
If I = 0 Then
wks.Copy 'Blatt in neue Arbeitsmappe kopieren
Set wbNeu = ActiveWorkbook
Else
'Blatt am Ende der neuen Arbeitsmappe einfügen
wks.Copy After:=wbNeu.Sheets(wbNeu.Sheets.Count)
End If
Set wks = wbNeu.Worksheets(wbNeu.Sheets.Count)
With wks
'Ausgeblendete Spalten löschen
For Spalte = .UsedRange.Column + .UsedRange.Columns.Count To 1 Step -1
If .Columns(Spalte).Hidden = True Then .Columns(Spalte).Delete
Next
'Alle Spalten einblenden
.Cells.EntireColumn.Hidden = False
End With
Next
Application.Dialogs(xlDialogSaveAs).Show
'Datei mit Originaldaten schließen ohne zu speichern
wbThis.Close savechanges:=False
End Sub

Noch eine Idee?
Find es super das du mir so hilfst, ich lerne sehr viel dabei
Anzeige
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
28.08.2006 22:31:15
fcs
Hallo Gerhard,
da hab ich beim Überarbeiten eine Kleinigkeit zuviel gelöscht oder vergessen.
Ändere die Zeile wie folgt:

Set wks = wbThis.Worksheets(Blatt(I)) 'Tabelle die kopiert werden soll

Evtl. muss für den CommandButton im Eigenschaftenfenster noch die Eigenschaft "TakeFocusOnClick" auf "False" gesetzt werden. Zumindest bei mir mit Excel97 notwendig gewesen, da sonst ein paar Zeilen später in der Copy-Anweisung ein Fehler kommt.
gruss
Franz
Anzeige
AW: Speichern nur sichtbarer Spalten - Zusatzfrage
29.08.2006 09:19:12
Gerhard
Hallo Franz,
alles funktioniert. Suuuuuper!
Danke vielmals
AW: Speichern nur sichtbarer Spalten
25.08.2006 15:09:10
Peter
Hallo Obler,
so sollte es gehen - ggf. Tabellen-Namen anpassen
Public

Sub Nur_eingeblendete()
Dim WkSh_Q     As Worksheet
Dim WkSh_Z     As Worksheet
Dim iSpalte_Q  As Integer
Dim iSpalte_Z  As Integer
Application.ScreenUpdating = False
Set WkSh_Q = Worksheets("Tabelle1")
Set WkSh_Z = Worksheets("Tabelle3")
iSpalte_Z = 1
For iSpalte_Q = 1 To 256
If WkSh_Q.Rows(iSpalte_Q).EntireColumn.Hidden = False Then
WkSh_Q.Columns(iSpalte_Q).Copy WkSh_Z.Columns(iSpalte_Z)
iSpalte_Z = iSpalte_Z + 1
End If
Next iSpalte_Q
Application.ScreenUpdating = True
End Sub

Viele Grüße Peter
Eine kurze Nachricht, ob es läuft, wäre nett - danke.
Anzeige
AW: Speichern nur sichtbarer Spalten
28.08.2006 08:27:15
Gerhard
Hallo Peter,
Deine Lösung funktioniert.
Franz hatte auch die Funktion mit dem abspeichern in eine neue Date inkludiert.
Deshalb hab ich seine Lösung genommen.
Trotzdem vieln Dank an Dich
;
Anzeige
Anzeige

Infobox / Tutorial

Sichtbare Spalten in Excel speichern


Schritt-für-Schritt-Anleitung

Um nur die sichtbaren Spalten in Excel zu speichern, kannst du ein VBA-Makro verwenden. Hier ist eine Schritt-für-Schritt-Anleitung, wie du das umsetzen kannst:

  1. Öffne Excel und drücke ALT + F11, um den Visual Basic for Applications (VBA) Editor zu öffnen.
  2. Füge ein neues Modul hinzu: Klicke im Menü auf Einfügen und wähle Modul.
  3. Kopiere den folgenden Code in das Modul:
Sub preisliste()
    'Kopiert Tabelle in neue Arbeitsmappe, nur Werte, ausgeblendete Spalten werden gelöscht
    Dim wbThis As Workbook, wbPreis As Workbook, wksPreis As Worksheet, Spalte As Integer
    Set wbThis = ThisWorkbook
    Set wksPreis = wbThis.Worksheets("Preisliste") 'Tabelle die kopiert werden soll

    ' Datei Speichern falls nicht gespeichert
    If wbThis.Saved = False Then
        wbThis.Save
    End If

    wksPreis.UsedRange.Value = wksPreis.UsedRange.Value 'Formeln durch Werte ersetzen
    wksPreis.Copy 'Blatt in neue Arbeitsmappe kopieren
    Set wbPreis = ActiveWorkbook
    Set wksPreis = wbPreis.Worksheets(1)

    With wksPreis
        'Ausgeblendete Spalten löschen
        For Spalte = .UsedRange.Column + .UsedRange.Columns.Count To 1 Step -1
            If .Columns(Spalte).Hidden = True Then .Columns(Spalte).Delete
        Next
        'Alle Spalten einblenden
        .Cells.EntireColumn.Hidden = False
    End With

    Application.Dialogs(xlDialogSaveAs).Show
    'Datei mit Originaldaten schließen ohne zu speichern
    wbThis.Close savechanges:=False
End Sub
  1. Schließe den VBA-Editor und gehe zurück zu Excel.
  2. Führe das Makro aus: Drücke ALT + F8, wähle preisliste und klicke auf Ausführen.

Häufige Fehler und Lösungen

  • Laufzeitfehler #13, Typen unverträglich: Dieser Fehler tritt auf, wenn du versuchst, ein Arbeitsblatt mit einem Array-Element zuzuweisen. Stelle sicher, dass du die Zeile anpasst:
Set wks = wbThis.Worksheets(Blatt(I)) 'Tabelle die kopiert werden soll
  • Makro funktioniert nicht: Überprüfe, ob alle Blätter, die du kopieren möchtest, tatsächlich existieren. Wenn du den Namen eines Blatts nicht korrekt angibst, wird das Makro fehlschlagen.

Alternative Methoden

Wenn du kein Makro verwenden möchtest, kannst du sichtbar Spalten manuell kopieren:

  1. Markiere die gewünschten Spalten (halte die Strg-Taste gedrückt, um mehrere Spalten auszuwählen).
  2. Kopiere die Spalten mit Strg + C.
  3. Öffne ein neues Arbeitsblatt und füge die Spalten mit Strg + V ein.

Diese Methode ist jedoch weniger effizient, besonders bei großen Datensätzen.


Praktische Beispiele

Hier ist ein Beispiel, wie du mehrere Arbeitsblätter in einer neuen Datei speichern kannst:

Sub BlattCopyNurSichtbareSpalten()
    'Kopiert Tabellen in neue Arbeitsmappe, nur Werte, ausgeblendete Spalten werden gelöscht
    Dim wbThis As Workbook, wbNeu As Workbook, wks As Worksheet, Spalte As Integer
    Dim Blatt As Variant, I As Integer
    Set wbThis = ThisWorkbook

    ' Datei Speichern falls nicht gespeichert
    If wbThis.Saved = False Then
        wbThis.Save
    End If

    Blatt = Array("Preisliste", "Tabelle1", "Tabelle2") 'Namen der Blätter, die Kopiert werden sollen
    For I = 0 To UBound(Blatt)
        Set wks = wbThis.Worksheets(Blatt(I)) 'Tabelle die kopiert werden soll
        wks.UsedRange.Value = wks.UsedRange.Value 'Formeln durch Werte ersetzen

        If I = 0 Then
            wks.Copy 'Blatt in neue Arbeitsmappe kopieren
            Set wbNeu = ActiveWorkbook
        Else
            'Blatt am Ende der neuen Arbeitsmappe einfügen
            wks.Copy After:=wbNeu.Sheets(wbNeu.Sheets.Count)
        End If

        Set wks = wbNeu.Worksheets(wbNeu.Sheets.Count)
        With wks
            'Ausgeblendete Spalten löschen
            For Spalte = .UsedRange.Column + .UsedRange.Columns.Count To 1 Step -1
                If .Columns(Spalte).Hidden = True Then .Columns(Spalte).Delete
            Next
            'Alle Spalten einblenden
            .Cells.EntireColumn.Hidden = False
        End With
    Next
    Application.Dialogs(xlDialogSaveAs).Show
    'Datei mit Originaldaten schließen ohne zu speichern
    wbThis.Close savechanges:=False
End Sub

Tipps für Profis

  • Nutze die ScreenUpdating-Eigenschaft: Setze Application.ScreenUpdating = False, um das Flackern des Bildschirms zu vermeiden, während das Makro läuft.
  • Optimiere deine Makros: Überlege, ob du nur die benötigten Spalten statt alle Spalten durchwerten möchtest, um die Leistung zu steigern.
  • Teste dein Makro: Bevor du es auf einer wichtigen Datei ausführst, teste es auf einer Kopie deiner Datei.

FAQ: Häufige Fragen

1. Wie speichere ich nur sichtbare Spalten ohne VBA? Du kannst die gewünschten Spalten manuell auswählen und kopieren, aber das ist bei großen Datenmengen unpraktisch.

2. Was mache ich, wenn das Makro nicht funktioniert? Überprüfe, ob alle Arbeitsblattnamen korrekt sind und ob das Makro korrekt in das Modul eingefügt wurde. Achte auch auf mögliche Fehler in der Codierung.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige