Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1928to1932
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

SpecialCells funktioniert nicht.

SpecialCells funktioniert nicht.
27.04.2023 15:50:04
GedankenBlitz

Hallo liebe Forummitglieder,

ich bin neu hier und bräuchte eure Hilfe, da ich sonst noch Wahnsinnig werde.
Und zwar habe ich folgendes Problem.
Ich möchte zwei oder auch mehrere Tabellen aus verschiedenen Tabellenblättern auf einem neuen Tabellenblatt zusammenführen (auch als neue Tabelle überschriften der Spalten sind bei alle gleich).
Das klappt auch mit dem unten stehenden Code.
Mein Problem ist jetzt nur das die ".specialCells(xlCellTypeVisible)" funktion nicht richtig funktioniert.
Beim rüber kopieren tut er das nur mit den sichtbaren Zeilen die nach der Reihe stehen z.b. Zeile 1,2,3 aber sobald Zeile 4 unsichtbar ist wegen dem Filter, werden die danach kommenden Zeilen nicht mehr mitgenommen also in diesem Beispiel Zeile 5,6,7 usw.., somit werden nur die Zeilen 1,2 und 3 übertragen und die Zeilen 5,6,7..., nicht übertragen, obwohl sie sichtbar sind.

Ich hoffe das Jemand dafür eine Lösung hat und bin für jeden Lösungsvorschlag Dankbar.


Sub Schaltfläche2_Klicken()

Dim RechWs1 As Worksheet
Dim RechWs2 As Worksheet
Dim ZielWs As Worksheet
Dim tempArr1 As Variant
Dim tempArr2 As Variant

Set RechWs1 = Sheets("GG")
Set RechWs2 = Sheets("UT")
Set ZielWs = Sheets("Gesamt Befundung")

With RechWs1
tempArr1 = .Range("A31:C57") .SpecialCells(xlCellTypeVisible)
End With

With RechWs2
tempArr2 = .Range(.Cells(31, 1), .Cells(35, 5)).SpecialCells(xlCellTypeVisible)
End With

With ZielWs
.Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 5)).Delete
.Cells(2, 1).Resize(UBound(tempArr1, 1), UBound(tempArr1, 2)) = tempArr1
.Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(UBound(tempArr2, 1), UBound(tempArr2, 2)) = tempArr2

End With

End Sub

7
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: SpecialCells funktioniert nicht.
27.04.2023 16:13:20
Der Steuerfuzzi
Hallo,

nicht zusammenhängende Bereiche sind in mehrere Bereiche (Areas) aufgeteilt. Die müsstest du einzeln durchgehen und einfügen.

z. B. so (ungetestet):
Sub Schaltfläche2_Klicken()

Dim RechWs1 As Worksheet
Dim RechWs2 As Worksheet
Dim ZielWs As Worksheet
Dim tempArr1 As Variant
Dim tempArr2 As Variant
Dim rngArea As Variant
Set RechWs1 = Sheets("GG")
Set RechWs2 = Sheets("UT")
Set ZielWs = Sheets("Gesamt Befundung")

For Each rngArea In .Range("A31:C57").SpecialCells(xlCellTypeVisible)
    With RechWs1
        tempArr1 = rngArea.Value
    End With
    With RechWs2
        tempArr2 = .Range(.Cells(31, 1), .Cells(35, 5)).SpecialCells(xlCellTypeVisible)
    End With
    With ZielWs
        .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 5)).Delete
        .Cells(2, 1).Resize(UBound(tempArr1, 1), UBound(tempArr1, 2)) = tempArr1
        .Cells(.Cells(Rows.Count, 1).End(xlUp).Row + 1, 1).Resize(UBound(tempArr2, 1), UBound(tempArr2, 2)) = tempArr2
    End With
Next
End Sub
Gruß
Michael


Anzeige
AW: SpecialCells funktioniert nicht.
27.04.2023 16:21:21
GerdL
Moin, teste mal.

Sub Schaltfläche2_Klicken()

    Dim RechWs1 As Worksheet
    Dim RechWs2 As Worksheet
    Dim ZielWs As Worksheet
    Dim tempArr1 As Variant
    Dim tempArr2 As Variant
    Dim r As Range

Set RechWs1 = Sheets("GG")
Set RechWs2 = Sheets("UT")
Set ZielWs = Sheets("Gesamt Befundung")

With ZielWs
    .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 5)).Delete
End With

For Each r In RechWs1.Range("A31:C57").SpecialCells(xlCellTypeVisible).Areas
    tempArr1 = r.Value
    Ziel.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(tempArr1, 1), 3) = tempArr1
End With

With RechWs2
    For Each r In .Range(.Cells(31, 1), .Cells(35, 5)).SpecialCells(xlCellTypeVisible).Areas
        tempArr2 = r.Value
        Ziel.Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(UBound(tempArr2, 1), 5) = tempArr2
    Next
End With

End With

End Sub
Gruß Gerd


Anzeige
AW: Korrektur
27.04.2023 16:24:33
GerdL
Upps,

das letzte End With muss raus.

Gruß Gerd


AW: Korrektur
28.04.2023 00:46:36
Yal
Mit einem konsequent Einrücken hätte man entdeckt, dass nicht nur das letzte End With weg muss, sondern auch einen Next fehlt.

Variable oder With, die nur einmal verwendet werden, sind infrage zu stellen.
Man könnte auch r.Rows.Count verwenden

Sub Schaltfläche2_Klicken()
Dim r As Range
    
    With Sheets("Gesamt Befundung")
        .Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 5)).Delete
        For Each r In Sheets("GG").Range("A31:C57").SpecialCells(xlCellTypeVisible).Areas
            .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(r.Rows.Count, 3) = r.Value
        Next
        For Each r In Sheets("UT").Range("A31:E35").SpecialCells(xlCellTypeVisible).Areas
            .Cells(Rows.Count, 1).End(xlUp).Offset(1, 0).Resize(r.Rows.Count, 5) = r.Value
        Next
    End With
End Sub
Na ok, es ist jetzt Freitag und Freitag ist bekannterweise Klugscheissertag ;-)

VG
Yal


Anzeige
AW: SpecialCells funktioniert nicht.
27.04.2023 16:24:34
Daniel
Hi
wie der Kollege schon schreib, das Problem sind Zellbereiche, die aus mehreren Teilbereichen bestehen (Areas)
schreibst du so einen Zellbereich in ein Array, wird nur der erste Block bis zur ersten Lücke ins Array übernommen.

Du könntest aber hier doch einfach mit .Copy und PasteSpecial xlpastevalues arbeiten.
damit könntest du normalerweise sogar das .SpecialCells weglassen, weil Excel ausgeblendete Zeilen automatisch ignoriert, aber schaden tuts nicht:

With ZielWs
.Range(.Cells(2, 1), .Cells(.Cells(Rows.Count, 1).End(xlUp).Row, 5)).Delete
RechWs1.Range("A31:C57") .SpecialCells(xlCellTypeVisible).Copy
.Cells(2, 1).PasteSpecial xlpastevalues
RechWs2.Range(.Cells(31, 1), .Cells(35, 5)).SpecialCells(xlCellTypeVisible).Copy
.Cells(Rows.Count, 1).PasteSpecial xlpastevalues
end with
Gruß Daniel


Anzeige
AW: SpecialCells funktioniert nicht.
27.04.2023 21:55:41
GedankenBlitz
Hey vielen Dank euch allen, jedoch ist mein Problem noch nicht gelöst weil immernoch nicht alle Zellen übertragen werden.
Ich habe mal eine Testdatei hochgeladen daran könnt ihr sehen das nur die Zeilen übertragen werden die in Reihenfolge sind.
https://www.herber.de/bbs/user/158940.xlsm
MfG


AW: SpecialCells funktioniert nicht.
27.04.2023 22:52:57
ralf_b
einen hab ich auch noch.
da du in deiner Datei intelligente Tabellen hast.

Dim rng As Range
For Each r In RechWs1.Range("A31:C57").SpecialCells(xlCellTypeVisible).Areas
   For Each s In r.Rows
        With ZielWs.ListObjects(1)
            If .InsertRowRange Is Nothing Then 'wenn tabelle  nicht leer 
              Set rng = .ListRows.Add.Range           ' zeile einfügen
            Else
              Set rng = .InsertRowRange                'erste Zeile nutzen
            End If
            rng.Resize(1, r.Columns.Count).Value = r.Value  'resize  verhindert #NV fehler
        End With
   Next
Next

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige