• 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.

Vraag over macro

Status
Niet open voor verdere reacties.

kippiebla

Gebruiker
Lid geworden
13 aug 2016
Berichten
287
In het voorbeeldbestand staat de macro "Filter" die rijen kopieert van werkblad "Bron" naar werkblad "Kopie" en wel zo dat alleen de rijen worden gekopieerd waar in kolom C de woorden "Ja goed", "Ja", Ja ok" en "Ja wel" staan. Is het ook mogelijk om dit om te draaien? Ik bedoel om aan te geven welke rijen niet moeten worden gekopieerd, nl. die de woorden "Fout", "Twijfel", "Weet niet", "Niet goed" en "Echt fout" bevatten. Dus in plaats van een positieve selectie en negatieve te maken? Verder zou ik ook nog graag willen dat de selectie niet alleen in werking gaat als de cel in kolom C exact het woord "Fout" bevat, maar ook als het woord "Fout" in de betreffende cel voorkomt, dus ook bij "beetje fout", "goed fout", "echt fout" etc. En dat geldt ook voor de woorden "Twijfel", etc. Zou iemand mij hierbij kunnen helpen?
 

Bijlagen

  • Proef kopieren werkbladen def test.xlsm
    21,2 KB · Weergaven: 43
Misschien even logisch nadenken? De filteroptie uit jouw vorige draadje is sneller en simpeler aan te passen maar heb je niet toegepast.
 
Ik heb de code van de macro aangepast, zoals ik het begrijp van V&A. D.w.z. regel 3 van de macro gewijzigd in:

If Cells(i, 3) <> "Fout" Or Cells(i, 3) <> "Twijfel" Or Cells(i, 3) <> "Weet niet" Or Cells(i, 3) <> "Niet goed" Then

Maar ik doe iets verkeerd, want hij filtert helemaal niet meer. In werkblad "Kopie" krijg ik gewoon hetzelfde lijstje als in werkblad "Bron". Dus ik doe iets verkeerd, maar heb geen idee wat......

In de bijlage de door mij veranderde macro.
 

Bijlagen

  • Proef kopieren werkbladen def test negatief.xlsm
    22,1 KB · Weergaven: 40
Laatst bewerkt:
Ook de operatoren OR en AND zijn onbekend?

Lijkt mij allemaal heel basaal en als je dat niet begrijpt zou ik van VBA wegblijven.;)
 
Laatst bewerkt:
Code:
Sub Filter2()
   With Sheets("bron").Range("$A$4:$C$18")       'je bereik
      On Error Resume Next                       'doorgaan bij een fout
      .Parent.ShowAllData                        'eventuele filter ergens op dat tabblad uitzetten
      On Error GoTo 0                            'einde doorgaan bij fout
      .AutoFilter 3, "<>ja*", xlAnd, "*"         'wegfilteren van alles dat begint met een ja en de lege cellen in kolom C
      .Offset(1).Resize(.Rows.Count - 1).Copy Sheets("Kopie").Cells(Rows.Count, 1).End(xlUp).Offset(1)   'gefilterde zaken doorkopieren
      .AutoFilter                                'filter uitzetten
   End With
End Sub
 
Ja V&A, is een beetje dom van me. Met operatoren "AND" i.p.v. "OR" werkt ie prima. Maar ik ben er nog niet. Ik zou graag willen dat de filter niet alleen in werking gaat als de cel in kolom C exact het woord "Fout" bevat, maar ook als het woord "Fout" in de betreffende cel voorkomt, dus ook bij "beetje fout", "goed fout", "echt fout" etc. En dat geldt voor alle andere woorden die ik in de macro uitsluit. In de bijlage een nieuwe versie van het bestand. En daar kan je zien dat de rijen met "Echt Fout" en "Beetje Twijfel" nog niet worden weggefilterd. En dat is wel de bedoeling.

Met Voorwaardelijke Opmaak in werkblad "Bron" werk ik met codes als =ISGETAL(VIND.SPEC("fout";$C5)) om bijv. ook "echt fout" rood te maken. Maar ik weet niet hoe ik dat dan in een macro zou moeten verwerken, als dat al de weg is.
 

Bijlagen

  • Proef kopieren werkbladen def test negatief2.xlsm
    22,1 KB · Weergaven: 37
Laatst bewerkt:
Code:
Sub Filter2()
   With Sheets("bron").Range("$A$4:$C$18")       'je bereik
      On Error Resume Next                       'doorgaan bij een fout
      .Parent.ShowAllData                        'eventuele filter ergens op dat tabblad uitzetten
      On Error GoTo 0                            'einde doorgaan bij fout
      .AutoFilter 3, "<>ja*", xlAnd, "*"         'wegfilteren van alles dat begint met een ja en de lege cellen in kolom C
      .Offset(1).Resize(.Rows.Count - 1).Copy Sheets("Kopie").Cells(Rows.Count, 1).End(xlUp).Offset(1)   'gefilterde zaken doorkopieren
      .AutoFilter                                'filter uitzetten
   End With
End Sub

Excuus Cow18. Ik vrees dat ik hiermee niet uit de voeten kan...... Snap nog niet goed wat deze macro doet.
 
Code:
Sub hsv()
With Sheets("bron").Cells(5, 1).CurrentRegion.Offset(1)
 Set d = CreateObject("scripting.dictionary")
  sv = .Value
   For Each a In Array("niet", "twijfel", "fout")
    For i = 1 To UBound(sv)
      If InStr(1, sv(i, 3), a, 1) Then d(sv(i, 3)) = ""
    Next i
   Next a
     .AutoFilter 3, d.keys, 7
     .Offset(1).Copy Sheets("kopie").Cells(Rows.Count, 1).End(xlUp).Offset(1)
     .AutoFilter
End With
End Sub
 
Dank HSV! Maar als ik de macro uitvoer, krijg ik een foutmelding: "Fout 429 tijdens runtime." En "ActiveX-onderdeel kan object niet maken". De foutenopsporing verwijst naar regel 3 van de macro: Set d = CreateObject("scripting.dictionary"). Eerlijk gezegd begrijp ik er geen sikkepit van, maar ik hoop dat er een oplossing mogelijk is.......
 
Laatst bewerkt:
Ga in de VBA omgeving naar menu Extra → Verwijzingen (references) en vink....
Code:
[FONT=&quot]Microsoft Scripting Runtime[/FONT]
....aan.

Ook nog een kleine aanvulling in de code.

Code:
Sub hsv()
With Sheets("bron").Cells(5, 1).CurrentRegion.Offset(1)
 Set d = CreateObject("scripting.dictionary")
  sv = .Value
   For Each a In Array("niet", "twijfel", "fout")
    For i = 1 To UBound(sv)
      If InStr(1, sv(i, 3), a, 1) Then d(sv(i, 3)) = ""
    Next i
   Next a
[COLOR=#ff0000]   If d.Count > 0 Then[/COLOR]
     .AutoFilter 3, d.keys, 7
     .Offset(1).Copy Sheets("kopie").Cells(Rows.Count, 1).End(xlUp).Offset(1)
     .AutoFilter
[COLOR=#ff0000]   End If[/COLOR]
End With
End Sub
 
grappig, de macro van HSV en die van mij werken volgens het zelfde principe, maar vanuit een andere richting. Ik sluit bepaalde zaken uit, dus zoals je bij aanvang aangaf een negatieve selectie, HSV gaat meer voor het positieve verhaal, maar daarna doen we klak hetzelfde. Dus als je HSV's macro aan de praat krijgt, dan moet de mijne dat ook doen.

De fout die bij HSV optreedt, is dat je vermoedelijk in het scherm VBA in de bovenbalk op "extra" moet klikken en daarna op verwijzingen. Daar staat vermoedelijk wel of niet een vinkje bij een regel die begint met "ONTBREEKT : ...." of zoiets. Vindt je zoiets ?
 
Ik wilde dit in een keer doen @cow18,

Code:
[COLOR=#3E3E3E] .AutoFilter 3, [/COLOR]Array("*niet*", "*twijfel*", "*fout*"),7

Maar dat kan maximaal met twee items in de array door gebruik met de jokertekens.
Vandaar de dictionary methode.
 
eigenaardig, op de manier dat jij (en ik eigenlijk ook) een dictionary aanmaakt, is dat volgens "late binding" en dan hoef je die referentie niet toe te voegen.
Zie https://excelmacromastery.com/vba-dictionary/ en dan even zoeken (CTRL+F) op "late". (= 7.1 in de "contents")
Die "Microsoft Scripting Runtime" staat bij mij zeker niet aangevinkt.

En ja, ik had ook eventjes, zonder resultaat, dat pad bewandeld ... .
 

Bijlagen

  • Aantekening 2020-05-10 230407.png
    Aantekening 2020-05-10 230407.png
    21,8 KB · Weergaven: 53
Laatst bewerkt:
Help! Heel veel hulp, dank jullie wel, maar ik heb een Macbook en gebruik dus Excel voor de Mac en wat ik begrijp is dat je dan geen Microsoft Scripting Runtime kan aanvinken. Die hele "voorkeuren" (preferences) ontbreken. Bestaat er toch een manier?
 
Als ik het zo lees heb je de verwijzing inderdaad niet nodig.
Maar een Mac zal denk ik weer verklaren waarom het niet werkt.

Misschien morgen maar in een "normale" array wat proberen voor je.

Voor nu is het gedaan.
 
Eerlijk gezegd kan ik jullie niet volgen. Ben echt nog een newbie, zeker met macro's. Heb ontzettend veel waardering voor alle hulp die dit forum biedt en ook jullie nu weer. Maar ik snap dus eigenlijk niet goed wat jullie zeggen. Dus mijn vraag nu is: is er iets aan de foutmelding 429 te doen?
 
Als ik het zo lees heb je de verwijzing inderdaad niet nodig.
Maar een Mac zal denk ik weer verklaren waarom het niet werkt.

Misschien morgen maar in een "normale" array wat proberen voor je.

Voor nu is het gedaan.

O dat zou heel fijn zijn HSV!
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan