vba zoeken in meerdere bladen

Status
Niet open voor verdere reacties.

xyntarsus

Gebruiker
Lid geworden
21 jun 2012
Berichten
11
goedemorgen,

ik heb op dit forum gezocht en gekeken naar een macro die ik wil bouwen.
De werking zoals ik die bedacht had zie ik echter nog niet terugkomen

Ik heb een bestand bestaande uit een aantal tabbladen waar tabellen in staan
(in de kolom het art. nr. en in de rij het weeknummer).
Ik wil nu een macro bouwen die uit elk blad de regel met een specifiek artikelnummer
kopieert en in een nieuw blad zet.
Daarnaast zou hij dan de regel moeten beginnen met de bladnaam.


Kan dat, en zo ja hoe moet ik beginnen??

Gr. Richard
 
Plaats eens een voorbeeldbestandje met enkel werkbladen en wat gegevens zodat we een idee krijgen van je opzet.
 
Bijgevoegd het basisbestandje (in een zip)

Het is de bedoeling dat er op het blad "totaal" een knop komt om te zoeken.
Als de gebruiker hierop klikt moet er een invoerveld komen waar een artikelnummer moet worden ingevoerd.
Vervolgens moet de macro een nieuw bestand maken waar hij van elk project de regel die begint met
het artikelnummer neerzet

(dus bv: in inputbox ingevoerd "1002" geeft een bestandje met de naam "datum vandaag 1002"
waarin onder elkaar alle artikelen 1002 staan (hele regels) en waarin in de eerste kolom de projectnummers
zijn toegevoegd)

ik hoop dat dat kan en lukt :$



Bekijk bijlage voorraadbeheer forum.zip
 
Code:
Sub zoeken_nummer()
Sheets.Add , Sheets(Sheets.Count)
Sheets(Sheets.Count).Name = "Temp"
ArtNr = InputBox("Geef het te zoeken artikelnr op.", "Artikelnummer:")
On Error Resume Next
For i = 5 To Sheets.Count - 1
    With Sheets(i)
        fRow = .Columns(1).Find(ArtNr, , xlValues, xlWhole).Row
        .Cells(fRow, 1).Resize(, 57).Copy Sheets("Temp").Range("B" & Rows.Count).End(xlUp).Offset(1)
        Sheets("Temp").Range("A" & Rows.Count).End(xlUp).Offset(1) = .Name
    End With
Next
fName = Format(Date, "dd-mm-yyyy") & "_" & ArtNr
Sheets("Temp").Copy
With ActiveWorkbook
    .SaveAs "G:\" & fName & ".xlsx", 51
    .Close True
End With
Application.DisplayAlerts = False
Sheets("Temp").Delete
Application.DisplayAlerts = True
End Sub
Zorg er wel voor dat Projecten, Totaal, basis en blanco de eerste vier werkbladen zijn in je bestand.
 
super, ik ga hem gelijk proberen :)

wat ik wel zie is dat je hem wegschrijft als xlsx, maar neem aan dat dat ook als xls kan?
(was vergeten te vertellen dat we met xl 2003 werken :$)

edit: dat werkt inderdaad :)

wat hij nu doet is dat hij de namen van de bladen in een lijst zet waar het artikel voorkomt,
kan ik daarachter ook een kopie zetten van de rij waarin het artikelnummer staat?

edit2: na wat juiste instellingen in excel doen, en ook daadwerkelijk opslaan, werkt het :D

super bedankt, voor nu is deze vraag opgelost
 
Laatst bewerkt:
ik weet dat het een vullende vraag is en misschien niet in dit draadje thuis hoort maar nog het volgende:

in het zelfde bestand heb ik een userform aangemaakt waarmee ik beginweek en looptijd van een project kan aangeven.
Nu wil in graag in de eerste kolom na de artikelnaam het aantal benodigde artikelen invullen, en dan automatisch
(na het drukken op een "update" knop) de gegevens in de juiste weken invullen.

zoiets als:
voor elke (start -1) < week < (einde +1) kopieer Range("ingevulde gegevens")

ps: het -1 en +1 heb ik gebruikt omdat ik niet wist hoe ik groter / kleiner of gelijk moest aangeven

Kan iemand me weer verder op weg helpen??
 
Post eens een voorbeeldbestandje met je userform en maak adhv een voorbeeld duidelijk wat je wil bereiken.
 
in het user form (via de knop "nieuw blad maken") kan ik een beginweek en een looptijd invoeren.
In het betreffende nieuwe blad vul ik in de eerste kolom na de artikelnaam het aantal in dat de klant nodig heeft.

Wat ik nu graag zou willen is dat ik een knop hebt die de kolom met aantallen kopieert naar de weken beginnende met de startweek en eindigend met de eindweek.
Dit zodat ik de ingevulde gegevens niet steeds hoef te kopieren met de hand.
Op deze manier kan ik dan ook makkelijk updaten als de looptijd wijzigt.


de file:
Bekijk bijlage voorraadbeheer forum2.zip
 
Volgende keer wel een voorbeeldbestand zonder wachtwoord op het VBA-project posten, kostte weer een paar minuten extra :D
Heb in blad Basis een macro gezet die meegekopieërd wordt naar nieuwe tabbladen. Maak eens een nieuw blad, vul wat aantallen in en draai de macro tst.
Laat eens weten of dit de bedoeling is.
 

Bijlagen

thx, was idd vergeten het ww eraf te halen.

de macro loopt vast op de eerste regel gelijk (scolumn...)
hij geeft de melding: objectvariabele With is niet ingesteld

Als ik de code verder zie lijkt dit wel de opzet te zijn die ik bedoel :)
 
hij komt al verder, maat loopt nu vast in de if...then regel

hij geeft de melding:
fout 1004: Door de toepassing of object gedefinieerde fout
 
@xyntarsus

Muggeziften ('debugging') is de beste manier om VBA te leren.
Gebruik het forum voor suggesties, stel er een eer in die naar jouw situatie aan te passen en werkend te krijgen.
 
@ snb:
via het debuggen kom je er inderdaad een heleboel over te weten, zo heb ik het tot nu toe ook gedaan.
lezen, suggesties gebruiken en aanpassen, en de code 'analyseren' als het mis gaat.

Alleen in dit geval zou ik niet weten wat er mis kan gaan :(
het lijkt me dat het allemaal gewoon klopt, maar toch doet hij het niet


ps: dit is mn eerste grotere vba project (zoals jullie waarschijnlijk wel gezien hebben)
dus tot een paar weken terug was alles nog nieuw voor me ;)
 
Geef eens een voorbeeld van een projectnummer dat je invoert (reeël voorbeeld)
 
een projectnummer is altijd een nummer van 5 cijfers
(22345 zou een reeel voorbeeld zijn)
 
Gebruik je mijn voorbeeldbestand of pas je een eigen origineel aan?
Zoals je gemerkt hebt heb ik op blad Basis de opmaak van de weekgetallen gewijzigd in Standaard en niet meer Tekst.
Geef dus alle getallen in je userform in als integers (niet 01, 02, enz...) maar 1, 2, enz...
 
super :D

hij doet het :P

maar even voor mijn leermomentje: dit lag er dus echt alleen aan dat het gegevenstype anders was?
(tekst ipv standaard)
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan