2016-03-25 9 views
-1

Ich habe noch nie VBA verwendet, ich kenne die Befehle und Sachen nicht. Ich versuche es wirklich und ich brauche bitte Hilfe. Ich muss nur die sichtbaren Daten aus den angegebenen Spalten kopieren und in ein anderes Arbeitsblatt einfügen. Beim Ausführen des Codes erhalte ich jedoch einen Indexfehler außerhalb des Bereichs. Im Code muss ich die Zeilen aus der 7. Zeile auswählen und ich denke, ich habe das ein bisschen grob geschrieben. Kann jemand meinen Code überprüfen, warum funktioniert das nicht? Irgendwelche Vorschläge für eine bessere Lösung werden geschätzt.Wie kopiert man nur sichtbare Zellen von der Arbeitsmappe in die Arbeitsmappe?

Sub CopyData() 

Windows("Source.xlsx").Activate 
Range("D7, F7, G7, I7, J7, K7, L7, M7, O7, AD7, AX7, CO7, CQ7, CR7, AX7").Select 
Range(Selection, Selection.End(xlDown)).Select 

If Selection.EntireColumn.Hidden = False Then 
Selection.Copy 

End If 

Windows("Destination.xlsx").Activate 
Range("A2").Select 
ActiveSheet.Paste 

End Sub 
+0

Wenn Sie möchten, können Sie für eine einfache Lösung gehen, die nicht vba ist. Gehen Sie zu Abschnitt im Home-Tab. Wählen Sie "Gehe zu Spezial". Dort wählen Sie nur sichtbare Zellen aus. Kopieren Sie die Datei und fügen Sie sie am gewünschten Speicherort in eine andere Arbeitsmappe ein. Nur sichtbare Zellen werden eingefügt. – skkakkar

+0

Ich muss das automatisieren, weil ich die Daten für eine wöchentliche Aussage brauche –

Antwort

0

Geben Sie diesen einen Schuss:

Sub CopyData() 

'set variables for wkb and ws to copy 
Dim wbSource As Workbook 
Set wbSource = Workbooks("Source.xlsx") 

Dim wsCopy As Worksheet 
Set wsCopy = wbSource.Worksheets("Sheet1") 'change name as needed 

'set variables for wkb and ws to paste 
Dim wbDest As Workbook 
Set wbDest = Workbooks("Destination.xlsx") 

Dim wsDest As Worksheet 
Set wsDest = wbDest.Worksheets("Sheet1") 

'copy visible cells for specific range 
With wsCopy 

    Dim lRow As Long 
    lRow = .Range("D" & .Rows.Count).End(xlUp).Row 

    Dim rCopy As Range 
    Set rCopy = Union(.Range("D7:D" & lRow), .Range("F7:F" & lRow), _ 
     .Range("G7:G" & lRow), .Range("I7:I" & lRow), .Range("J7:J" & lRow), _ 
     .Range("K7:K" & lRow), .Range("L7:L" & lRow), .Range("M7:M" & lRow), _ 
     .Range("O7:O" & lRow), .Range("AD7:AD" & lRow), .Range("AX7:AX" & lRow), _ 
     .Range("CO7:CO" & lRow), .Range("CQ7:CQ" & lRow), .Range("CR7:CR" & lRow)) 

End With 

'paste 
rCopy.SpecialCells(xlCellTypeVisible).Copy wsDest.Range("A2") 

End Sub 
+0

Vielen Dank! Ich habe viel davon gelernt! :) –

0
Dim rng As Range 
Set rng = Application.Intersect(ActiveSheet.UsedRange, Range("A1:H500"))'range depends your work 
Windows("Destination.xlsx").Activate 
rng.SpecialCells(xlCellTypeVisible).Copy Destination:=Range("A2") 

oder einfach verwenden,

ActiveSheet.UsedRange.SpecialCells(xlCellTypeVisible) 

ohne Schnittverfahren. Kommt ganz auf deine Arbeit an.

Verwandte Themen