Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1680to1684
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

CopyPaste mit VBA

CopyPaste mit VBA
18.03.2019 09:47:45
SB
Hallo liebe Community,
nachdem ich mit eurer Hilfe viele Excel Probleme lösen konnte und erste (rudimentäre) VBA Erfahrungen gesammelt habe, habe ich nun ein Problem bei dem ich nicht weiter komme und eure Hilfe benötige. Deshalb wende ich mich das erste Mal direkt an euch. Ich habe folgendes Problem:
Ich habe eine Excel-Tabelle mit mehreren Blättern und in jeder sind der Aufbau und die Struktur identisch, aber jedes Blatt funktioniert wie eine Datenbank. Das bedeutet, ich weiß nur min und max Anzahl der Zellen (und den Bereich) und es können auch Leerzellen dazwischen sein. Ich möchte jetzt gerne alles in einem Tabellenblatt ohne Leerzeilen konsolidieren. Leider komme ich mit Formeln nicht weiter und habe mit VBA angefangen. Das funktioniert soweit, nur crasht mir der ganze Code wenn in der Zelle eine Formel statt einer Nummer steht.
Ich habe ein simples Beispiel angehängt mit dem Code, den ich bisher habe. Mit Spalte B funktioniert der Code einwandfrei, mit Spalte C crasht er. Könnt ihr mir helfen? https://www.herber.de/bbs/user/128459.xlsm
Vielen lieben Dank für eure Hilfe!

12
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: CopyPaste mit VBA
18.03.2019 09:51:34
Nepumuk
Hallo,
brauchst du die Formeln in der Zusammenfassung oder genüge da die Werte?
Gruß
Nepumuk
AW: CopyPaste mit VBA
18.03.2019 09:55:07
SB
Hi Nepumuk,
nein, ich benötige nur die Werte. Daher habe ich versucht mithilfe eine Copy&Paste-Schrittes innerhalb des gesamten Copy&Paste die Formeln mit Werten zu überschreiben. Trotzdem kann er das nicht kopieren wenn anfänglich eine Formel drinsteht.
Viele Grüße
Sascha
AW: CopyPaste mit VBA
18.03.2019 10:16:57
Nepumuk
Hallo,
teste mal:
Option Explicit
Public Sub Consolidate()
Dim objInputWorksheet As Worksheet
Dim objOutputWorksheet As Worksheet
Dim lngInputRow As Long, lngOutputRow As Long
With Application
.Calculation = xlCalculationManual
.EnableEvents = False
.ScreenUpdating = False
End With
lngOutputRow = 3
Set objOutputWorksheet = ThisWorkbook.Worksheets("Consolidation")
With objOutputWorksheet
Call .Range(.Rows(3), .Rows(.Rows.Count)).ClearContents
End With
For Each objInputWorksheet In ThisWorkbook.Worksheets
If Not objInputWorksheet Is objOutputWorksheet Then
With objInputWorksheet
For lngInputRow = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
If Not IsEmpty(.Cells(lngInputRow, 2).Value) Then
Call .Rows(lngInputRow).Copy
Call objOutputWorksheet.Cells(lngOutputRow, 1). _
PasteSpecial(Paste:=xlPasteValuesAndNumberFormats)
lngOutputRow = lngOutputRow + 1
End If
Next
End With
End If
Next
Set objOutputWorksheet = Nothing
With Application
.CutCopyMode = False
.Calculation = xlCalculationAutomatic
.EnableEvents = True
.ScreenUpdating = True
End With
End Sub

Der Code gehört in ein Standardmodul. Menüleiste im VBA-Editor - Einfügen - Modul
Gruß
Nepumuk
Anzeige
AW: CopyPaste mit VBA
18.03.2019 10:59:08
SB
Das ist genial, vielen vielen Dank :)
Einzige Nachfrage: Geht es auch statt der kompletten Zeile nur die eine Zelle auszuwählen und zu kopieren? Ich kann die If-Schleife (ab For IngInputRow = 2 To...) nicht mehr ganz nachvollziehen. Gerne auch mit kurzer Erklärung, damit ich es verstehe.
AW: CopyPaste mit VBA
18.03.2019 11:32:15
SB
Habs geschafft :)
Jetzt ist die letzte Hürde, dass die Zelle für Excel nicht leer ist, da eine Formel drinsteht. Auch wenn die Formel ein "" ausgibt. Könnt ihr mir hierbei helfen?
AW: CopyPaste mit VBA
18.03.2019 12:25:12
Nepumuk
Hallo,
ändere die Zeile:
If Not IsEmpty(.Cells(lngInputRow, 2).Value) Then
mit dieser:
If .Cells(lngInputRow, 2).Value vbNullString Then
Gruß
Nepumuk
Anzeige
AW: CopyPaste mit VBA
18.03.2019 12:30:27
SB
Perfekt!!! Vielen, vielen Dank für deine schnelle Hilfe.
Viele Grüße
Sascha
AW: CopyPaste mit VBA
18.03.2019 17:08:31
SB
Eine Frage ist heute beim Einarbeiten des Moduls in die eigentliche Datei noch aufgetaucht: Ich habe noch weitere Tabellenblätter in der Datei, aus denen nichts rauskopiert werden soll. Wie kann ich diese als Variable definieren und aus der If-Abfrage rausnehmen?
Viele Grüße
Sascha
AW: CopyPaste mit VBA
18.03.2019 17:28:37
Nepumuk
Hallo Sascha,
welche Art von Tabellen sind mehr, die welche kopiert werden sollen oder die welche nicht kopiert werden sollen?
Gruß
Nepumuk
AW: CopyPaste mit VBA
19.03.2019 10:33:24
SB
Hi Nepumuk,
gehören versteckte Tabellenblätter auch dazu? Ich habe ein Outputsheet, 6 Tabellenblätter die nicht kopiert werden sollen und 11-14 Tabellenblätter die kopiert werden sollen. Zusätzlich befinden sich noch 5 versteckte Tabellenblätter (sollen nicht kopiert werden) in dem Sheet.
Viele Grüße
Sascha
Anzeige
AW: CopyPaste mit VBA
19.03.2019 11:33:18
Nepumuk
Hallo Sascha,
teste mal:
Option Explicit

Public Sub Consolidate()
    
    Dim objInputWorksheet As Worksheet
    Dim objOutputWorksheet As Worksheet
    Dim lngInputRow As Long, lngOutputRow As Long
    Dim strNotCopy As String
    
    With Application
        .Calculation = xlCalculationManual
        .EnableEvents = False
        .ScreenUpdating = False
    End With
    
    strNotCopy = ",Tabelle1,Tabelle2,Tabelle3," 'Komma vorne und hinten nicht löschen !!!
    lngOutputRow = 3
    Set objOutputWorksheet = ThisWorkbook.Worksheets("Consolidation")
    With objOutputWorksheet
        Call .Range(.Rows(3), .Rows(.Rows.Count)).ClearContents
    End With
    
    For Each objInputWorksheet In ThisWorkbook.Worksheets
        If InStr(1, strNotCopy, "," & objInputWorksheet.Name & ",") = 0 Then
            If objInputWorksheet.Visible = xlSheetVisible Then
                If Not objInputWorksheet Is objOutputWorksheet Then
                    With objInputWorksheet
                        For lngInputRow = 3 To .Cells(.Rows.Count, 2).End(xlUp).Row
                            If .Cells(lngInputRow, 2).Value <> vbNullString Then
                                Call .Rows(lngInputRow).Copy
                                Call objOutputWorksheet.Cells(lngOutputRow, 1). _
                                    PasteSpecial(Paste:=xlPasteValuesAndNumberFormats)
                                lngOutputRow = lngOutputRow + 1
                            End If
                        Next
                    End With
                End If
            End If
        End If
    Next
    
    Set objOutputWorksheet = Nothing
    
    With Application
        .CutCopyMode = False
        .Calculation = xlCalculationAutomatic
        .EnableEvents = True
        .ScreenUpdating = True
    End With
End Sub

Gruß
Nepumuk
Anzeige
AW: CopyPaste mit VBA
19.03.2019 12:34:58
SB
Funktioniert perfekt. Vielen Dank Nepumuk!!!

304 Forumthreads zu ähnlichen Themen

Anzeige
Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige