Gå til innhold

Anbefalte innlegg

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
Videoannonse
Annonse

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 av aadnk
Lenke til kommentar

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

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

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 av RulleRimfrost
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
×
×
  • Opprett ny...