Nur sichtbare Zellen verwenden

Informationen und Beispiele zu den hier genannten Dialog-Elementen:
ListBox InputBox MsgBox
Bild

Betrifft: Nur sichtbare Zellen verwenden
von: Sven
Geschrieben am: 14.09.2015 14:12:59

Hi zusammen,
mal wieder eine Frage an die Community.
Wie kann ich einen Bereich definieren der nur sichtbare Zellen berücksichtigt?
Hiermit fülle ich meine Listbox, würde die Ergebnisse aber gerne auf sichtbare Zellen beschränken.


Set rng = Worksheets("Tabelle2").Range("T4:AC1000").Cells.SpecialCells(xlCellTypeVisible).Find  _
_
    (xSuche, LookAt:=xlPart, LookIn:=xlValues)
    If Not rng Is Nothing Then
    With Worksheets("Tabelle2")
        xErste = rng.Address(False, False)
        y = True
        Do Until xAdresse = xErste
            ReDim Preserve arr(0 To 3, 0 To iRowU)
            arr(0, iRowU) = .Cells(rng.Row, 1)
            arr(1, iRowU) = .Cells(rng.Row, 2)
            arr(2, iRowU) = .Cells(rng.Row, 3)
            arr(3, iRowU) = .Cells(rng.Row, 4)
            iRowU = iRowU + 1
            Set rng = .Range("T4:AC1000").FindNext(After:=rng)
            xAdresse = rng.Address(False, False)
        Loop
        xAdresse = ""
        xErste = ""
    End With
    End If
Jemand eine Idee? mit specialcells(xlcelltypevisible) funktioniert es nicht :(
Danke vorab und beste Grüße
Sven

Bild

Betrifft: AW: Nur sichtbare Zellen verwenden
von: Arthur
Geschrieben am: 14.09.2015 14:20:34
Hallo Sven.
Soweit ich weiß erkennst du ausgeblendete Zeilen/ Spalten an deren Höhe/ Breite. Wenn die = 0 ist, dann einfach überspringen.
Gruß, Arthur

Bild

Betrifft: AW: Nur sichtbare Zellen verwenden
von: Sven
Geschrieben am: 14.09.2015 15:11:54
Hi Arthur,
vielen Dank für die schnelle Antwort.
Aber irgendwie scheint


.find
nicht damit zurecht zukommen.
Set rng = Worksheets("Tabelle2").Range("T4:AC1000").Find _
         (xSuche, LookAt:=xlPart, LookIn:=xlValues).RowHeight = 0 
VBA sagt: Objekt erforderlich.
Hinter den .Range Befehl kann ich es ja nicht setzen da .find dann nicht mehr arbeiten will.
Denkfehler? Oder muss ich tatsächlich eine übergeordnete Abfrage machen?
Nochmal Danke vorab.
Gruß
Sven

Bild

Betrifft: AW: Nur sichtbare Zellen verwenden
von: Werner
Geschrieben am: 14.09.2015 16:47:01
Hallo Sven,
keine Ahnung ob es funktioniert, kann derzeit nicht testen. Versuch doch mal anstatt

With Worksheets("Tabelle2")

With Worksheets("Tabelle2").Cells.SpecialCells(xlCellTypeVisible)
Gruß Werner

Bild

Betrifft: AW: Nur sichtbare Zellen verwenden
von: Sven
Geschrieben am: 15.09.2015 12:36:53
Hallo Werner,
sorry für die späte Rückmeldung.
Das habe ich auch bereits ausprobiert. VBA meckert zwar nicht, liefert aber auch nicht die richtigen Ergebnisse.
Vielen Dank für deinen Versuch.
So schwer kann es doch eigentlich nicht sein.
Ich probiere weiter ... never give up ;)
Danke
Gruß
Sven

Bild

Betrifft: AW: Nur sichtbare Zellen verwenden
von: Werner
Geschrieben am: 16.09.2015 11:25:10
Hallo Sven,
also mit dem Code-Teil den du hier gezeigt hast füllst du ein Array und keine Listbox. Das Array wird auch korrekt befüllt -auch wenn Zeilen ausgeblendet oder durch Filtern ausgeblendet sind-.
Kannst ja hiermit mal ein wenig testen, die entsprechenden Einträge des Arrays werden in Message-Boxen ausgegeben.

Public Sub test()
Dim Rng As Range
Dim xErste As Variant
Dim xAdresse As Variant
Dim iRowU As Long
Dim xSuche As Variant
Dim arr()
xSuche = InputBox("Suchbegriff:", "Suchen")
Set Rng = Worksheets("Tabelle1").Range("A1:E20").Cells.SpecialCells(xlCellTypeVisible).Find _
 _
        (xSuche, LookAt:=xlPart, LookIn:=xlValues)
        If Not Rng Is Nothing Then
        With Worksheets("Tabelle1")
            xErste = Rng.Address(False, False)
            Do Until xAdresse = xErste
            ReDim Preserve arr(0 To 3, 0 To iRowU)
                arr(0, iRowU) = .Cells(Rng.Row, 1)
                arr(1, iRowU) = .Cells(Rng.Row, 2)
                arr(2, iRowU) = .Cells(Rng.Row, 3)
                arr(3, iRowU) = .Cells(Rng.Row, 4)
                MsgBox arr(0, iRowU) & " iRowU " & iRowU
                MsgBox arr(1, iRowU) & " iRowU " & iRowU
                MsgBox arr(2, iRowU) & " iRowU " & iRowU
                MsgBox arr(3, iRowU) & " iRowU " & iRowU
                iRowU = iRowU + 1
                Set Rng = .Range("A1:E20").FindNext(After:=Rng)
                xAdresse = Rng.Address(False, False)
            Loop
            xAdresse = ""
            xErste = ""
        End With
        End If
End Sub
Gruß Werner
Der Fehler wird wohl eher daran liegen wie du die Daten aus dem Array in deine Listbox schreibst.

 Bild

Beiträge aus den Excel-Beispielen zum Thema "Nur sichtbare Zellen verwenden"