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

Macro voor printen

Status
Niet open voor verdere reacties.

autoweek

Gebruiker
Lid geworden
8 nov 2011
Berichten
177
Beste helper,

Ik weet niet of het mogelijk is, maar hier mijn volgende vraag: (ik hoop dat ik het duidelijk genoeg heb uitgelegd anders zie ik graag vragen tegemoet)

Ik heb voor alle 30 medewerkers een apart urenoverzicht waar een kolom in staat met de datum, weeknummer, maandnummer, dagcode, de kloktijden en nog wat meer.

Op het moment dat ik voor januari de urenoverzichten voor de medewerkers wil uitprinten, moet ik de volgende stappen 30x herhalen.
1. allereerst open ik een bestand van een medewerker. Dan selecteer ik mbv een filter de maand die moet worden uitgeprint
2. Dan selecteer ik het gebied dat ik uitgeprint wil hebben.
3. En vervolgens druk ik op afdrukken.

Om dit op te lossen dacht ik aan het volgende, maar ik heb geen idee of dit mogelijk is of hoe ik dit moet doen:
1. Een nieuw bestand aan maken waar ik knoppen inbouw voor elke maand een.
2. Deze knoppen link ik dan aan al die 30 bestanden. (Dus het is eenmalig eventjes veel werk dat is geen probleem)
3. Het idee is dan, dat wanneer ik de overzichten wil uitdraaien voor de maand januari. Dat ik dan dit nieuwe bestand open, de knop indruk van januari en de computer vervolgens aan de slag gaat om dit van alle medewerkers uit te printen op de manier zoals ik hierboven heb beschreven.

Zoals ik al eerder heb gezegd heb ik geen idee van of dit mogelijk is, en als het mogelijk is heb ik ook nog geen idee hoe je dit voor elkaar moet krijgen.

In ieders geval alvast bedankt voor de moeite! Groet, Ralf.
 
Zet de macro in een bestandje en sla deze op in de zelfde map als de urenstaten.
Pas sheetnaam , filter criteria aan jouw situatie aan of plaats een voorbeeld bestand.

Code:
Sub printen()
FilePath = ThisWorkbook.Path & "\"
fname = Dir(FilePath & "*.xls")
InputBox ("welke maand wil je afdrukken?")
Do While fname <> ""
If fname <> ThisWorkbook.Name Then
With Workbooks.Open(fname)
.Sheets("blad1").Range("$A$1").CurrentRegion.AutoFilter Field:=1, Criteria1:=maand
.PrintOut
.Close Savechanges:=False
End With
End If
fname = Dir()
Loop
End Sub

Niels
 
Laatst bewerkt:
Plaats macro in een bestandje en sla deze op in dezelfde map als de urenstaten.

Code:
Sub printen()
FilePath = ThisWorkbook.Path & "\"
fname = Dir(FilePath & "*.xls")
iJaar = InputBox("welk jaar wil je afdrukken?", "jaartal opgeven", Year(Date))
iMaand = InputBox("welke maand wil je afdrukken?", "maand opgeven", Month(Date))

If iJaar = "" Or iMaand = "" Then Exit Sub
Do While fname <> ""
If fname <> ThisWorkbook.Name Then
With Workbooks.Open(fname)
.Sheets("blad1").Range("C3").Value = iMaand
.Sheets("blad1").Range("C4").Value = iJaar
.Sheets("blad1").Range("$A$20").CurrentRegion.AutoFilter Field:=4, Criteria1:=iMaand
.Sheets("blad1").Range("$A$20").CurrentRegion.AutoFilter Field:=3, Criteria1:=iJaar
.Sheets("blad1").Range("A1:V" & Cells(Rows.Count, "D").End(xlUp).Row).PrintOut
.Close Savechanges:=False
End With
End If
fname = Dir()
Loop
End Sub

Niels
 
Laatst bewerkt:
Oke ik ga er zo spoedig mogelijk mee aan de slag.

Ieders geval alvast heel erg bedankt voor je hulp en snelle reacties.
 
Ik heb de macro in een bestandje gezet en opgeslagen in de map waar mijn urenoverzichten staan.
Welke stappen en aanpassingen moet ik nu maken om de macro te laten werken?

mvg, Ralf
 
Als je voorbeeld bestand hetzelfde is al sje andere bestanden hoef je verder niks te veranderen.
Maak een knop aan om de macro uit te voeren en het moet werken.

Niels
 
Nee die is niet hetzelfde. In de originele bestanden, staat het maand nummer in cel C2 het maand nummer in cel C4.
De cel waar de filter voor de maand in staat is cel G17.
Maar het gebied wat ik dan elke selecteer veranderd per maand. want de datums lopen steeds op. Dus maart staat in de rijden 456 tot 487 en april weer in de rijen 488 tot 518. Ik weet niet of dit uitmaakt? Maar het gebied want geselecteerd moet worden is: Kolom A tot en met Kolom V. en dan 50 rijen naar beneden.
En in de macro staat : Range("$A$20")
Vanwaar cel A20?
 
Verander de C3 in C2 en hij doet precies wat je vraagt.
Heb je hem wel getest?

Waarom er A20 in de macro staat komt omdat de filters in deze regel staan.
Wat doet de macro:
vraagt om jaar en maand op te geven.
opent bestand1 uit de map waar het macro bestand ook in staat.
vult in c4 het jaartal en in c2 het maandnummer in.
Filtert in C20 op jaar en in D20 op maand (dus je G17 begrijp ik niet)
print het gebied A1:V20 & A123:v152 uit (maand 4 , jaar 2011)
sluit het bestand af
opent het volgende bestand
enz...

Niels
 
Dag niels,
Sub printen()
FilePath = ThisWorkbook.Path & "\"
fname = Dir(FilePath & "*.xlsx")
iJaar = InputBox("welk jaar wil je afdrukken?", "jaartal opgeven", Year(Date))
iMaand = InputBox("welke maand wil je afdrukken?", "maand opgeven", Month(Date))

If iJaar = "" Or iMaand = "" Then Exit Sub
Do While fname <> ""
If fname <> ThisWorkbook.Name Then
With Workbooks.Open(fname).Sheets("blad1").Range("C2").Value = iMaand
.Sheets("blad1").Range("C4").Value = iJaar
.Sheets("blad1").Range("$A$17").CurrentRegion.AutoFilter Field:=4, Criteria1:=iMaand
.Sheets("blad1").Range("$A$17").CurrentRegion.AutoFilter Field:=3, Criteria1:=iJaar
.Sheets("blad1").Range("A1:V" & Cells(Rows.Count, "D").End(xlUp).Row).PrintOut
.Close Savechanges:=False
End With
End If
fname = Dir()
Loop
End Sub

Die regel die ik vet heb gedrukt geeft een foutmelding weer dat ie het bestand niet kan vinden.
 
Bestaat er wel een sheet met de naam blad1 in dat bestand?
bij mij werkt het gewoon.
Plaatst de map op je computer en open bestand map printen en druk op de knop.

Bekijk bijlage Autoweek.rar

PS je moet de macro wel zo kopieeren als ik hem hem weergegeven.
Het stuk na de dik gedrukte tekst staat in mijn macro op de volgende regel.


Niels
 
Hallo Niels!

Ik heb de volgende stappen uitgevoerd:
1. Ik heb je macro in een leeg excel bestand gezet en opgeslagen in de map waar de urenoverzichten in staan.
2. In de macro heb ik regel drie aangepast van xls. naar xlsx.
3. In regel 10 ''C4'' aangepast naar ''C2''

En als ik de macro dan wil uitvoeren kreeg ik dus die foutmelding
 
voeg het rode gedeelte eens toe en probeer het dan nog eens.

de .xls stond er zodat .xlsx en evt. xlsm bestanden worden geopend maar als je alleen xlsx bestanden hebt is dat geen probleem.

Code:
With Workbooks.Open([COLOR="#FF0000"]filepath &[/COLOR] Fname)

Niels
 
Laatst bewerkt:
Dag Niels,

Heb het net nog een keer geprobeert en hij werkt. heel knap werk van je!

Heeft de macro er bezwaar tegen als ik alvast alle bestanden open? Want ik moet elke keer een wachtwoord per werknemer invoeren namelijk en de bestanden laden heel langzaam?
 
Naja, ik haal anders wel de wachtwoorden van de bestanden is makkelijker
 
Als ze open staan worden ze geactiveerd als ze niet open staan worden ze geopend.

Code:
Sub printen()
filepath = ThisWorkbook.Path & "\"
fname = Dir(filepath & "*.xls")
iJaar = InputBox("welk jaar wil je afdrukken?", "jaartal opgeven", Year(Date))
iMaand = InputBox("welke maand wil je afdrukken?", "maand opgeven", Month(Date))

If iJaar = "" Or iMaand = "" Then Exit Sub
For Each wb In Excel.Workbooks
c01 = c01 & "|" & wb.Name
Next
Do While fname <> ""
If fname <> ThisWorkbook.Name Then
If InStr(c01, fname) = 0 Then
Workbooks.Open (filepath & fname)
End If
Workbooks(fname).Activate
With Workbooks(fname)
.Sheets("blad1").Range("C2").Value = iMaand
.Sheets("blad1").Range("C4").Value = iJaar
.Sheets("blad1").Range("$A$17").CurrentRegion.AutoFilter Field:=4, Criteria1:=iMaand
.Sheets("blad1").Range("$A$17").CurrentRegion.AutoFilter Field:=3, Criteria1:=iJaar
.Sheets("blad1").Range("A1:V" & Cells(Rows.Count, "D").End(xlUp).Row).PrintOut
'.Close Savechanges:=False het teken(') weghalen als er wel afgesloten moet worden
End With
End If
fname = Dir()
Loop
End Sub

Niels
 
Geweldig Niels! Ik ben even de wachtwoorden aan het verwijderen en dan zal ik het zo weer is even testen
 
Het werkt alleen als je de bestanden in dezelfde excel open heb staan, als je er bv 1 in een 2de excel open hebt staan dan wordt die alsnog geopend maar dan als alleen lezen.

Niels
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan