vbafloh
Goto Top

Sichtbare Zellen (gefiltert und ausgeblendet) aus einem Workbook in ein neues Kopieren

Hallo zusammen,

bin noch grün im VBA und sehe den Wald vor lauter Bäumen nicht mehr. Kann mir bitte jemand die Augen öffnen...
Hab eine Tabelle gefiltert und Spalten ausgeblendet, diese Darstellung soll so mit VBA in eine neue Datei kopiert werden.

Die Tabelle ist umfangreich (hier wsQData), die Länge ist variabel

Dim wsData as Worksheet 'Quell - Daten
Dim wsNewReport as Worksheet 'Ziel -Daten

Mit verschiedenen Funktionen sind auf der Tabelle einige Zeilen herausgefiltert worden
gleichzeitig habe ich einige Spalten ausgeblendet (verschiedene VBA module)

Jetzt möchte ich genau diese Darstellung in eine neue Datei + neues Worksheet kopieren.
Also die ausgeblendeten Zeilen und Spalten sollen nicht kopiert werden.

Der MakroRecorder ergab so etwas:
                           wsData.Activate
                           Cells.Select
                           Selection.Copy
                           wsNewReport.Activate
                           Application.CutCopyMode = False
                           ActiveSheet.PasteSpecial Format:=1, Link:=1, DisplayAsIcon:=False, _
                                                  IconFileName:=False
Da gibt es aber eine Fehlermeldung in der letzten Zeile "Worksheet class" Fehler

ein weiterer Versuch war dies hier, aber auch ohneErfolg
           wsData.Range.SpecialCells(xlVisible).Copy_
           Destination:=wsNewReport.Range("A1")  
Für jegliche Unterstützung wäre ich sehr dankbar!

Gruß
Floh

[Edit Biber] Auch Donnerstags Codetags [/Edit]

Content-Key: 172848

Url: https://administrator.de/contentid/172848

Printed on: April 19, 2024 at 22:04 o'clock

Mitglied: 76109
76109 Sep 09, 2011 at 18:20:25 (UTC)
Goto Top
Hallo VBAFloh!

Eher so:
Sub CopySpecialCells1()
    Sheets("Tabelle1").Cells.SpecialCells(xlVisible).Copy Destination:=Sheets("Tabelle2").Range("A1")  
End Sub
oder so:
Sub CopySpecialCells2()
    Dim Wks1 As Worksheet, Wks2 As Worksheet
    
    Set Wks1 = Sheets("Tabelle1")  
    Set Wks2 = Sheets("Tabelle2")  
    
    Wks1.Cells.SpecialCells(xlVisible).Copy Destination:=Wks2.Range("A1")  
End Sub

Gruß Dieter
Member: VBAFloh
VBAFloh Sep 10, 2011 at 12:17:51 (UTC)
Goto Top
Hallo Dieter,

vielen Dank!!!!!!
Ja mit "Cells" hat er es dann genommen.
Allerdings hatte er dann irgendwie Probleme mit der Datenmenge gekriegt und ist abgeschmiert.


Es funktioniert jetzt, wenn ich einen genauen Range angebe.


Sub CopySpecialCells3()
Dim Wks1 As Worksheet, Wks2 As Worksheet

Set Wks1 = Sheets("Tabelle1")
Set Wks2 = Sheets("Tabelle2")

Wks1.Range("A1:EZ300").SpecialCells(xlVisible).Copy Destination:=Wks2.Range("A1")

End Sub


Das ist für mich auch ok, nur "EZ300" muß ich noch dynamisch ermitteln und dann variable übergeben.
Hierzu muß ich jetzt mal das Froum durchforsten, steht hier sicher schon irgendwo....

Was mir auch noch nicht gefällt ist, er übernimmt alle Formate außer die Spaltenbreite.
Gibt es hierfür noch einen Parameter, den ich dahinter schreiben muß?

Vielen Dank für die Unterstützung!

Gruß
Floh
Mitglied: 76109
76109 Sep 10, 2011 at 15:41:23 (UTC)
Goto Top
Hallo Floh!

Sofern sich im Kopierbereich keine Leerzeilen/Leerspalten befinden, in etwa so:
Sub CopySpecialCells3()
    Dim Wks1 As Worksheet, Wks2 As Worksheet, CopyRange As Range, ColCount As Long
    
    Set Wks1 = Sheets("Tabelle1")  
    Set Wks2 = Sheets("Tabelle2")  
    
   'Kopierbereich bis zur 1. Leerzeile/Leerspalte  
    Set CopyRange = Wks1.Range("A1").CurrentRegion  
    
   'Daten nach Ziel kopieren  
    CopyRange.SpecialCells(xlVisible).Copy Destination:=Wks2.Range("A1")  
 
    With Wks2
        'Letzte Spalte in Ziel ermitteln  
         ColCount = .Range("A1").CurrentRegion.Columns.Count  
    
        'Spaltenbreite automatisch anpassen  
        .Range(.Columns(1), .Columns(ColCount)).AutoFit
    End With
End Sub

Gruß Dieter
Member: VBAFloh
VBAFloh Sep 10, 2011 at 17:52:10 (UTC)
Goto Top
Hallo Dieter,


vielen Dank!
Hat super geklappt mit der Region!

Das mit dem "AutoFit" ergibt nicht ganz das gewünschte Ergebnis, da ich Zellen mit Zeilenumbruch habe.

Aber da wird mir noch was einfallen.
Glaube ich hab Prinzip verstanden.
Wird wahrscheinlich auf eine Schleife mit der Queel Spaltenbreite hinauslaufen.

Vielen Dank nochmal und ein schönes WE.

Gruß
Floh