Helpmij.nl
Helpmij.nl
Helpmij.nl
Steun Helpmij.nl! Klik hier     Computerprobleem? Klik hier!

Quote

Weergeven resultaten 1 tot 17 van 17

Onderwerp: Verticaal zoeken op linkse/1e letter

  • Vraag is opgelost
  1. #1

    Verticaal zoeken op linkse/1e letter

    Hallo,

    Momenteel ben ik druk bezig met het ontwikkelen van een bestand om de voorraad te tellen. Hierbij heb ik een vba code toegepast die zoekt naar locaties waarin bv de letter 'A' voorkomt. Nu zou ik graag willen dat deze code alleen de locaties ophaalt die met de letter 'A' beginnen. Dit moet volgens mij wel mogelijk zijn met iets van left(string, 1), maar ik heb onvoldoende kennis van VBA om dit te schrijven. De gegevens moeten worden opgehaald uit het tabblad 'Tellijst totaal' en geplaatst worden in het tabblad 'Tellijst per locatie'.

    Ik hoop dat iemand hierbij kan helpen.

    Gr. Arjen
    Attached Files Attached Files

  2. #2
    Feijtert,

    Wellicht heb je hier iets aan. Ik heb het gehele stuk van Do - Loop vervangen door het onderstaande en dat werkt. Je moet echter wel nog zelf even kijken welke gegevens van de Tellijst Totaal je nog meer wilt door kopiëren, maar dat is "meer van hetzelfde".

    Kijk ook eens naar de wijze om Rng te omschrijven.

    Succes ermee.

    Groet,
    Ronald


    StartRij = 2
    MaxRij = DataBlad.Range("f65536").End(xlUp).Row
    Set Rng = DataBlad.Range("f" & StartRij, "f" & MaxRij)

    For Each p In Rng
    If p.Value Like " A*" Then
    p.Copy Destination:=WerkBlad.Range("A65000").End(xlUp).Offset(1, 0)
    p.Offset(0, 1).Copy Destination:=WerkBlad.Range("A65000").End(xlUp).Offset(0, 1)
    End If
    Next
    Met vriendelijke groet,

    Ronald

  3. #3
    Ronald, bedankt voor je input!

    Bij mij werkt het ook goed. Alleen met dit script wordt er alleen gezocht naar locaties die met een 'A' beginnen. Echter, er zullen ook locaties ingevoerd worden die met een andere letter beginnen. Verder neemt de code bij mij alleen de waarden over en niet de opmaak, dat staat iets mooier. In principe doet mijn code alles wat ie moet doen, alleen hij zou uitsluitend de waarden uit de range moeten overnemen waarvan de 1 letter overeenkomt met de opgegeven letter.

    Gr. Arjen

  4. #4
    Beste Arjen,

    Ben nog wat aan het knutselen geweest. Als je de vba-code in bijlage 4.1 bekijkt kan je zelf beslissen of en wat je overneemt. Ik heb 2 varianten erbij gemaakt (één met inputbox en één waarbij in cel b1 wordt gekeken). Daarbij wordt gekeken naar de eerste letter van het artikelnummer. Ook het artikel "Actiecode" wordt meegenomen.

    Wat er in jouw code niet goed gaat is dat het zoekargument met ".Find" in de gehele string kijkt of de letter er in voorkomt. Vandaar dat ook het artikelnummer dat begint met "AB" wordt opgenomen. Dat heb ik in mijn code afgevangen. Ik zou ook zo 1-2-3 weten hoe je dat in jouw code zou kunnen ondervangen.

    Succes!

    Groet,

    Ronald
    Attached Files Attached Files
    Met vriendelijke groet,

    Ronald

  5. #5
    Hoi Ronald,

    Hartelijk dank voor het meedenken! Dit is inderdaad wat ik bedoelde! Ik was zelf ook al wat aan het stoeien geweest met 'If LTrim(Left(p, 2)) = Woord', maar ik kwam er toch niet uit. Ik krijg alleen nog wel een foutmelding wanneer ik een andere letter dan de 'a' in de inputbox typ, namelijk:

    Eigenschap linestyle van klasse border kan niet worden ingesteld

    Heb je toevallig enig idee waar dat aan kan liggen?

    Gr. Arjen

  6. #6
    Arjen,

    Dat komt doordat MaxRij dan 5 is en de range waarvoor de opmaak moet worden ingesteld vanaf rij 6 telt. Omdat je een argument ingeeft dat geen resultaten oplevert is het sheet vanaf rij 6 leeg. VBA weet dus even neit wat er moet gebeuren. Ik heb de code aangepast, zie in de bijlage sub TestOpzoeken2.

    Groet,

    Ronald
    Attached Files Attached Files
    Met vriendelijke groet,

    Ronald

  7. #7
    He, ja, ik zie het! Nou, ik heb er in ieder geval weer van geleerd!

    Nogmaals bedankt voor je hulp!

    Gr. Arjen

  8. #8
    Is dit niet simpeler ?

    Code:
    Sub Opzoeken()
      With Sheets("Tellijst totaal").UsedRange.Columns(6)
        .AutoFilter 1, "?" & Sheets("Tellijst per locatie").[B1].Value & "**"
        .Offset(1).Resize(, 3).SpecialCells(xlCellTypeVisible).Copy Sheets("Tellijst per locatie").Range("A6")
        .AutoFilter
      End With
    End Sub
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  9. #9
    Nee, deze code werkt helaas niet goed. Wanneer er een 'a' wordt ingevoerd, moeten alleen de locaties opgehaald worden die ook met een 'a' beginnen....

  10. #10
    Daar hebben we het volgende op bedacht:

    Code:
    Sub Opzoeken()
      Sheets("Tellijst per locatie").Range("A6:K20").clearcontents
      With Sheets("Tellijst totaal").UsedRange.Columns(6)
        .AutoFilter 1, Replace(Sheets("Tellijst per locatie").[B1].Text & "*", " ", "?")
        .Offset(1).Resize(, 3).SpecialCells(xlCellTypeVisible).Copy Sheets("Tellijst per locatie").Range("A6")
        .AutoFilter
      End With
    End Sub
    Hang aan B1 een validatielijst met alle mogelijke lokaties.
    Laatst aangepast door snb : 9 september 2009 om 17:22
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  11. #11
    Arjen,

    Met dank aan de code van snb (heb ik ook van geleerd ), heb ik die code nog wat verder gebruikt en tot het volgende resultaat. Volgens mij heb je nu wat je zoekt en het werkt (bij mij) ook met bijvoorbeeld "ab".

    Groet,

    Ronald
    Attached Files Attached Files
    Met vriendelijke groet,

    Ronald

  12. #12
    Dat is overbodig als je in plaats van
    Code:
    Sheets("Tellijst per locatie").Range("A6:A20000").EntireRow.Delete
    Code:
    Sheets("Tellijst per locatie").Range("A6:K20").clearcontents
    
    of 
    
    Sheets("Tellijst per locatie").usedRange.offset(5).clearcontents
    gebruikt.

    En het kan simpeler:

    Code:
        With Sheets("Tellijst per locatie").UsedRange.Offset(5)
          .Borders.LineStyle = xlContinuous
          .Borders.Weight = xlThin
          .Font.Name = "Arial"
          .Font.Size = 10
       End With
    Laatst aangepast door snb : 10 september 2009 om 11:16
    VBA voor smarties


    Application.SheetsInNewWorkbook = 1
    Vermijd Select en Activate in VBA-code
    Gebruik in VBA-code With ... End With in plaats van objectvariabelen

  13. #13
    snb,

    Nog even een korte reactie/vraag.

    De reden dat ik kies voor het verwijderen van de rijen is dat de opmaak er ook mee verdwijnt en je hoeft het bereik niet steeds aan te passen. Anders zou je ook een regel moeten opnemen met "usedRange.clearformats".

    Jouw code is inderdaad korter. Wat ik echter niet goed kan doorgronden is waarom de opmaak er met jouw code niet zo uit komt te zien als ik het heb opgegeven. Bij mij gaat de opmaak dan verder dan de laatste gebruikte regel. Ook is de opmaak van de laatste regel dan niet zoals ik het zou willen. Ik kan niet zo snel iets bedenken dat dat voorkomt. Als jij wel een aanpassing weet hoor ik het graag.

    Groet,

    Ronald

    ps @Arjen: hoewel dit jouw post is probeer ik zoveel mogelijk van de opmerkingen van snb te leren zodat ik dat voortaan kan gebruiken.
    Met vriendelijke groet,

    Ronald

  14. #14
    Beste snb,

    De code werkt perfect! Bedankt! Ik ben nu bezig met het verfijnen van de code in tabblad 'Scanlijst' Deze werkt namelijk ook nog niet zoals het hoort...

    En Ronald, natuurlijk is het geen probleem dat je gebruik maakt van mijn post. Zo kan ik er ook nog wat van leren!

  15. #15
    Ik heb toch nog 1 vraag. In het tabblad 'Scanlijst' zullen de EAN-codes verschijnen die door de medewerkers gescand worden. Vervolgens wordt er met een code verticaal gezocht in het tabblad 'Data' en worden de gegevens opgehaald. Echter, de EAN-codes worden weergegeven als exponentieel, bv. 8,71199E+12. Hierdoor werkt de code niet meer. Is er een mogelijkheid dat de vba code toch werkt zonder dat de getallen worden geconverteerd naar tekst?

    Alvast bedankt voor de moeite!
    Attached Files Attached Files

  16. #16
    Dit is eenvoudig op te lossen door de celopmaak te wijzigen in "Getal" zonder decimalen. Zo zal 8,71199E+12 dan als 8711990000000 verschijnen. Dat kan met de volgende code:

    Sheets("Scanlijst").Range("B9:B42").NumberFormat = "0"

    Groet,

    Ronald
    Met vriendelijke groet,

    Ronald

  17. #17
    Bedankt Ronald!

    Ik heb er even usedrange van gemaakt en nu draait ie perfect!

Berichtenregels

  • U mag geen nieuwe discussies starten.
  • U mag niet reageren op berichten.
  • U mag geen bijlagen versturen.
  • Umag niet uw berichten bewerken.
  •  
Helpmij.nl
Helpmij.nl

Helpmij.nl en business

Partners
Sponsoren
Linkpartners
Aanbiedingen