• Privacywetgeving
    Het is bij Helpmij.nl niet toegestaan om persoonsgegevens in een voorbeeld te plaatsen. Alle voorbeelden die persoonsgegevens bevatten zullen zonder opgaaf van reden verwijderd worden. In de vraag zal specifiek vermeld moeten worden dat het om fictieve namen gaat.

Visible Cells (VBA)

Status
Niet open voor verdere reacties.

reneemettrie

Terugkerende gebruiker
Lid geworden
1 aug 2006
Berichten
1.281
In bijgevoegd bestand wordt eerst met een macro een filter op de tabel gezet (hier niet gedaan). Het resultaat is slechts één rij. Daarna moet de waarde van de tweede kolom in de resultaatrij worden opgehaald. Maar bijgevoegde code geeft altijd de tweede cel van de ongefilterde tabel.

Code:
Sub test()
Dim r As Range
Set r = Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible)
MsgBox r.Cells.Count 'dit geeft 4
MsgBox r.Cells(4) 'dit geeft de waarde van de tweede cel in de eerste gegevensrij zonder toegepaste filter

End Sub

Ik begrijp dit niet? Wie kan me dat uitleggen?

Heb het wel opgelost via een totaalrij met daarin de som of het gemiddelde van kolom 2, of zonder VBA met Sumifs.

Code:
Sub test2()
Dim WS As Worksheet, result As Integer

Set WS = Sheets("sheet1")
result = WS.ListObjects(2).TotalsRowRange.Cells(2).Value

MsgBox result
End Sub

Bekijk bijlage VisibleCells.xlsm
 
Misschien dat je dit bedoelt

Code:
Sub j()
 With Sheets(1).ListObjects(1).Range
  .AutoFilter 1, "NL"
  .AutoFilter 2, 6
  .Columns(2).Offset(1).Copy Range("E28")
 End With
End Sub
 
Code:
Sub test1()
  MsgBox Range("A1").CurrentRegion.SpecialCells(12).Areas(3).Cells(1).Offset(, 1)
End Sub
 
JVeer, bedankt, dit werkt inderdaad, maar legt niet uit waarom het met die Visible Cells niet werkt. Ik bekijk even het andere antwoord.
 
snb, snap niet hoe jij aan die "3" komt? Je hebt toch maar 2 areas (titels + resultaatlijn)? Of maar één, als het resultaat de eerste gegevensrij is?
Of zie ik dat verkeerd?
Heb het nu zo aangepast:
Code:
Sub test3()
Dim r As Range, AantalAreas As Byte, result


 AantalAreas = Range("A1").CurrentRegion.SpecialCells(12).Areas.Count
 Set r = Range("A1").CurrentRegion.SpecialCells(12).Areas(AantalAreas)

 result = r.Cells(r.Cells.Count).Value

  MsgBox result
End Sub
 
Code:
Sub M_snb()
  for each it in listobjects(1).range.SpecialCells(12).Areas
    msgbox it.address
  next
End Sub
 
Misverstand? Vraag was hoe je met die visible cells kunt werken, via die areas lukt dat inderdaad, bedankt hiervoor. Maar dat kunnen er toch maar hooguit 2 zijn (als resultaatrij niet de tweede rij is)?
In mijn vb is er maar één resultaatrij.
 
Als je toch alleen maar de waarde van 1 (gefilterde) rij wilt zien kan zo ook nog.

Code:
Sub j()
 With Sheets(1).ListObjects(1).AutoFilter.Filters(2)
  If .On Then MsgBox Replace(.Criteria1, "=", "")
 End With
End Sub
 
JVeer, dit werkt, simpel!
Maar moet bekennen dat ik het niet snap...
En de Help bij Autofilter voert me niet naar de uitleg van VBA, maar van Visual studio???
 
Of:
Code:
Sub hsv()
With Sheet1.ListObjects(1)
 MsgBox .Range(.AutoFilter.Range.Offset(1).SpecialCells(12).Row, 2)
End With
End Sub
 
Maar moet bekennen dat ik het niet snap...

Hij haalt simpelweg de waarde op van de filter boven kolom 2 van de tabel..Filter(2)
Wel wordt er nog gecheckt of de filtering aan staat voordat hij Criteria1 ophaalt.

De waarde wordt zo teruggegeven vanuit Criteria1: "=2"
Daarom heb ik de "=" vervangen door ""
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan