RulleRimfrost Skrevet 3. mars 2007 Del Skrevet 3. mars 2007 Sitter her å sløver, og tenkte jeg skulle lære litt VBA. Har laget en liten sak i Access som har to tabeller, "GROUP" og "MEMBER". Dette skal printes slik at rptSide_1 skal være en forekomst av "GROUP" og rptSide_2 skal liste opp MEMBER-forekomster der GROUP_NUMBER tilsvarer den gruppen. Pr nå har jeg fått til å printe den gruppen og members jeg har opp i et skjemaet mitt akkurat nå, men jeg trenger en funksjon for å loope gjennom hele "GROUP"-tabellen å gjøre samme operasjon for alle forekomster. Side_1 er en rapport på GROUP og Side_2 er en rapport på MEMBER Slik ser Privat sub som printer en forekomst ut: Dim stDocName1 As String Dim stDocName2 As String stDocName1 = "rptSide_1" stDocName2 = "rptSide_2" DoCmd.OpenReport stDocName1, acNormal, , "GROUP_NUMBER = " & GROUP_NUMBER DoCmd.OpenReport stDocName2, acNormal, , "GROUP_NUMBER = " & GROUP_NUMBER Jeg har litt erfaring fra php, så jeg antar vi snakker om en for-each på GROUP_NUMBER. Problemet blir vel filteret "GROUP_NUMBER = " & GROUP_NUMBER. Den er jo nå statisk knyttet til skjemaet, men det må jo liksom også settes til neste GROUP_NUMBER for hver loop... Tips ? Lenke til kommentar
aadnk Skrevet 3. mars 2007 Del Skrevet 3. mars 2007 (endret) Det er unødvendig å implementere dette i VBA da Access lett kan gjøre dette for deg dersom du definerer de ulike relasjonene mellom tabellene i databasen. Dette kan du gjøre ved å velge Tools -> Relationships... -> Tables og dernest dobbelklikke på alle tabellene. Trykk så på attributtet i Member-entiteten (Group_Number) og dra den over til primærnøkkelen i den andre entiteten. Dersom alt er i orden, vil du få en èn-til-mange-relasjon mellom henholdsvis Group og Member. Når dette er gjort, kan du ganske enkelt lage en rapport slik du ønsker ved å legge inn attributter fra begge entiteter i rapportveiviseren, og velge By group i neste vindu. Endret 3. mars 2007 av aadnk Lenke til kommentar
RulleRimfrost Skrevet 4. mars 2007 Forfatter Del Skrevet 4. mars 2007 Njeh, det er feigt. Dessuten utelot jag at rptSide_1 og rpt_Side_2 må være 2 separate rapporter, siden disse skal printes fra hver sin skuff, og rptSide_2 vil være et ukjent antall sider (kan være 10 member, kan være 300) Jeg tror jeg er på sporet her, eller ? Dim DB As DAO.Database, rs As DAO.Recordset, gruppe As String Set DB = CurrentDb Set rs = DB.OpenRecordset("GROUP", dbOpenDynaset) If Not (rs.BOF Or rs.EOF) Then rs.MoveFirst While Not rs.EOF gruppe = rs![GROUP_NUMBER] ' print rptSide_1, print rptSide_2 rs.MoveNext Wend End If rs.Close DB.Close Lenke til kommentar
aadnk Skrevet 4. mars 2007 Del Skrevet 4. mars 2007 Jeg vil tro det. Jeg har ikke fått anledning til å teste det, men jeg vil tro følgende kode skulle fungere: Public Sub PrintReports() Dim dbCurrent As Database, tbGroup As Recordset, sFilter As String ' Last inn database og tabell Set dbCurrent = CurrentDb Set tbGroup = dbCurrent.OpenRecordset("GROUP", dbOpenDynaset) ' Unngår konflikt med MoveFirst om tabellen er tom If Not (tbGroup.BOF Or tbGroup.EOF) Then tbGroup.MoveFirst ' Går gjennom alle poster Do While tbGroup.EOF ' Generer filter sFilter = "GROUP_NUMBER = " & tbGroup!GROUP_NUMBER ' Skriv ut to rapporter PrintReport "rptSide_1", sFilter PrintReport "rptSide_2", sFilter ' Gå til neste post tbGroup.MoveNext Loop End If ' Rydd opp tbGroup.Close dbCurrent.Close End Sub Public Sub PrintReport(ReportName As String, Optional Constraint As String) ' Skriv den angitte rapport DoCmd.OpenReport ReportName, acViewPreview, , Constraint, acHidden DoCmd.SelectObject acReport, ReportName, True DoCmd.PrintOut End Sub Lenke til kommentar
RulleRimfrost Skrevet 4. mars 2007 Forfatter Del Skrevet 4. mars 2007 (endret) Ahh takker. Det var det jeg prøvde på ja. Det filteret for oppdeling av GROUP var konseptuelt vanskelig for meg å forstå, men nå sitter det tror jeg. Vanskeligere å lære vba enn php synes jeg, siden 90% av Google-søkene returnerer komersielle sider som skal selge meg en bok OK. Betyr virkelig "Do while tbGroup.EOF" det samme som "Do while tbGoup NOT EOF" i andre språk ? Endret 5. mars 2007 av RulleRimfrost Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå