Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

.SpecialCells(xlCellTypeVisible) versteh ich nicht

Forumthread: .SpecialCells(xlCellTypeVisible) versteh ich nicht

.SpecialCells(xlCellTypeVisible) versteh ich nicht
08.07.2004 14:49:57
Reinhard
Hallo Wissende,
bei der Entwicklung des Codes zu:
https://www.herber.de/bbs/user/8247.xls
(evtl. Lösung von https://www.herber.de/forum/messages/451763.html )
hat mich SpecialCells(xlCellTypeVisible) sehr lange aufgehalten:-(
In A4 ist ein Autofilter, der über den Bereich A5:A106 geht. Wenn ich was Bestimmtes auswähle, sind nur die Zellen A10, A44, A78 eingeblendet, mit dem gleichen Inhalt zb "Gesundbrunnen-Apotheke)".
Mit .SpecialCells(xlCellTypeVisible).Cells(1,1) kann ich auf A10 zugreifen.
Leider nicht mit .SpecialCells(xlCellTypeVisible).Cells(2,1), da komme ich zu A11.
Makro1 liefert fälschlicherweise ungleich=wahr da es A10 mit A11 und A11 mit A12 vergleicht, wo verschiedene Apos drinstehen.
makro2 liefert korrekt ungleich=falsch da es A10 mit A10, A10 mit A44, A10 mit A78 vergleicht.
Wie komme ich nun an die eingeblendeten Zellen per Index ?, ohne per Schleife den Bereich A5:A106 nach eingeblendet zu durchforsten oder mit umgebautem Makro2 jede Zelle in ein Array einzulesen?
Dankeschön
Gruß
Reinhard

Sub test1()
Dim ungleich As Boolean
Set Bereich = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible)
For n = 1 To Bereich.Cells.Count - 1
If Bereich.Cells(n, 1) <> Bereich.Cells(n + 1, 1) Then
ungleich = True
Exit For
End If
Next n
MsgBox ungleich
End Sub


Sub test2()
Dim ungleich As Boolean
Set Bereich = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible)
For Each ze In Bereich.Cells
If Bereich.Cells(1, 1) <> ze Then
ungleich = True
Exit For
End If
Next ze
MsgBox ungleich
End Sub

Anzeige

1
Beitrag zum Forumthread
Beitrag zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: .SpecialCells(xlCellTypeVisible) versteh ich nicht
09.07.2004 08:58:55
Uwe
Hallo Reinhard,
da die sichtbaren Zellen keinen zusammengehörigen Bereich darstellen,
müssen die Teilbereiche nacheinander durchlaufen werden.
Hier der entsprechende Code für Deine Mappe:

Private Sub Worksheet_Calculate()
Dim ungleich As Boolean
Dim rngSZBereich As Range
Dim rngSZArray As Range
Dim rngSZ As Range
Dim rngZE As Range
Set rngSZBereich = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible)
Set rngZE = rngSZBereich.Cells(1)
Application.ScreenUpdating = False
Sheets("Diagramm").Select
With ActiveChart
.HasTitle = True
Select Case rngSZBereich.Cells.Count
Case 1
.ChartTitle.Text = Bereich.Cells(1, 1).Value
Case 102
.ChartTitle.Text = "Alle Apotheken"
Case 2 To 101
For Each rngSZArray In rngSZBereich
For Each rngSZ In rngSZArray
ungleich = rngSZ <> rngZE
If ungleich Then Exit For
Next rngSZ
Next rngSZArray
.ChartTitle.Text = IIf(ungleich, "Einige Apotheken", "Alle " & Chr(34) & rngSZBereich.Cells(1).Value & Chr(34) & " Apotheken")
End Select
.Deselect
End With
Worksheets("Daten").Activate
Range("A1").Select
Set rngSZBereich = Nothing
Application.ScreenUpdating = True
End Sub

Gruß Uwe
Anzeige
;
Anzeige

Infobox / Tutorial

Verwendung von .SpecialCells(xlCellTypeVisible) in VBA


Schritt-für-Schritt-Anleitung

  1. Öffne deine Excel-Datei und gehe zum VBA-Editor (Alt + F11).

  2. Füge ein neues Modul hinzu: Rechtsklick auf "VBAProject (DeinWorkbookName)" > Einfügen > Modul.

  3. Kopiere den folgenden Code in das Modul:

    Sub testSpecialCells()
       Dim ungleich As Boolean
       Dim Bereich As Range
    
       ' Definiere den Bereich mit sichtbaren Zellen
       Set Bereich = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible)
    
       ' Überprüfe auf ungleiche Werte
       For n = 1 To Bereich.Cells.Count - 1
           If Bereich.Cells(n, 1) <> Bereich.Cells(n + 1, 1) Then
               ungleich = True
               Exit For
           End If
       Next n
    
       ' Ausgabe des Ergebnisses
       MsgBox ungleich
    End Sub
  4. Starte das Makro: Drücke F5, während der Cursor im Code steht, um das Makro auszuführen.

  5. Überprüfe die Ergebnisse: Eine Meldung zeigt dir, ob es ungleiche Werte gibt.


Häufige Fehler und Lösungen

  • Problem: .SpecialCells(xlCellTypeVisible) funktioniert nicht.

    • Lösung: Stelle sicher, dass du sichtbare Zellen hast. Wenn alle Zellen ausgeblendet sind, wird der Fehler No cells were found ausgegeben.
  • Problem: Ergebnisse stimmen nicht überein.

    • Lösung: Überprüfe, ob du den richtigen Bereich und die richtige Filtereinstellung benutzt. Vergewissere dich, dass der Autofilter aktiv ist.

Alternative Methoden

  • Eine andere Möglichkeit, um mit sichtbaren Zellen zu arbeiten, ist die Verwendung von Selection.SpecialCells(xlCellTypeVisible). Damit kannst du nur die aktuell ausgewählten sichtbaren Zellen bearbeiten.

    Sub testSelectionSpecialCells()
       Dim sichtbareZellen As Range
       Set sichtbareZellen = Selection.SpecialCells(xlCellTypeVisible)
       ' Hier kannst du weitere Operationen mit sichtbaren Zellen durchführen.
    End Sub
  • Du kannst auch mit xlVisible arbeiten, um die Sichtbarkeit zu überprüfen.


Praktische Beispiele

Hier sind zwei praktische Beispiele, die zeigen, wie du .SpecialCells(xlCellTypeVisible) in verschiedenen Szenarien nutzen kannst.

  1. Zählen der sichtbaren Zellen:

    Sub countVisibleCells()
       Dim countVisible As Long
       countVisible = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible).Count
       MsgBox "Es gibt " & countVisible & " sichtbare Zellen."
    End Sub
  2. Werte aus sichtbaren Zellen kopieren:

    Sub copyVisibleCells()
       Dim Bereich As Range
       Set Bereich = Worksheets("Daten").Range("A5:A106").SpecialCells(xlCellTypeVisible)
       Bereich.Copy Destination:=Worksheets("Ziel").Range("A1")
    End Sub

Tipps für Profis

  • Nutze die Fehlerbehandlung, um sicherzustellen, dass dein Code nicht abstürzt, wenn keine sichtbaren Zellen vorhanden sind. Füge On Error Resume Next hinzu, um Fehler zu ignorieren.

  • Wenn du mit großen Datenmengen arbeitest, deaktiviere die Bildschirmaktualisierung vor und aktiviere sie nach dem Bearbeiten der Daten:

    Application.ScreenUpdating = False
    ' Dein Code hier
    Application.ScreenUpdating = True

FAQ: Häufige Fragen

1. Was ist .SpecialCells(xlCellTypeVisible)?
SpecialCells(xlCellTypeVisible) ist eine Methode in VBA, die es dir ermöglicht, nur die sichtbaren Zellen eines bestimmten Bereichs auszuwählen, z.B. nach einem Autofilter.

2. Warum funktioniert mein Makro nicht mit .SpecialCells(xlCellTypeVisible)?
Überprüfe, ob es sichtbare Zellen gibt. Wenn alle Zellen ausgeblendet sind, gibt es nichts auszuwählen, was einen Fehler verursacht.

3. Wie kann ich mit mehreren sichtbaren Zellen arbeiten?
Du kannst eine Schleife verwenden, um durch alle sichtbaren Zellen zu iterieren, wie im obigen Beispiel testSpecialCells() gezeigt.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige