16. august 2009 - 12:01Der er
9 kommentarer og 2 løsninger
Opdatere gennem Word VBA
På mit arbejde har vi en MS-Access 2003 database, som bl.a. indeholder en liste over igangværende arbejdsopgaver. Access er kun installeret hos en medarbejder, der opretter arbejdsopgaverne, men de øvrige 8 medarbejdere skal selv kunne angive, hvornår de har afsluttet opgaverne.
Medarbejderne kan se deres arbejdsopgaver i et Word 2003 dokument, der ganske simpelt "opdateres" ved mailmerge til databasen.
Jeg stiller nu følgende to spørgsmål: 1 (20 point): Kan det overhovedet lade sig gøre at opdatere databasen via en vba-brugerflade i Word? (I stedet for Word kan om nødvendigt) Excel også anvendes. 2 (100 point): Hvis det kan lade sig gøre, hvordan vil de centrale dele af koden så lyde?
Har anvendt Word som brugergrænseflade til en Access-DB, udfra ønsket om, at brugerne ikke direkte blev konfronteret med selve databasen.
Referencen til DAO er så tilføjet (Tools / References)
I et MODUL (Tools):
Rem Database-def. Public db, klient, postBy Rem Database - rutiner Rem ================== Public Sub LukDb() 'luk alle tabeller On Error Resume Next
klient.Close postBy.Close db.Close End Sub Public Sub åbnDatabase() Set db = OpenDatabase(xSti + "klientQcheck.mdb") End Sub Public Sub åbnKlient() åbnDatabase Set klient = db.OpenRecordset("klient") End Sub Public Sub åbnPostby() åbnDatabase Set postBy = db.OpenRecordset("postnrBy") End Sub Public Function checkPostNr(pNr) åbnPostby
postBy.Index = "primarykey" postBy.Seek "=", pNr
If Not postBy.NoMatch Then checkPostNr = True Else checkPostNr = False End If End Function Public Function hentBynavn(pNr) If checkPostNr(pNr) = True Then hentBynavn = postBy.Fields(1) Else hentBynavn = "" End If End Function Public Function findKlient(knr) åbnKlient
klient.Index = "primarykey" klient.Seek "=", knr
If Not klient.NoMatch Then xKlientNr = knr xKlientId = CStr(klient.Fields(0)) + " " + klient.Fields(1) findKlient = True Else findKlient = False xKlientId = "" End If End Function
Anvendelse af FIND KLIENT If Tools.findKlient(KlientNr) = True Then ... ...
OPDATERING: Rem Findes denne post If Tools.findPeriodeAktiviteter(knr, rÅr, aNr) = False Then Rem Nyoprettelse .AddNew .Fields(1) = knr Else rem Ajourføring .Edit .Fields(FeltNavn) = ts End If
@supertekst: Du har i sidste linje en End With - hvad hedder første del af den With? (hvad er syntaksen?)
@terry og spg: Jeg kan godt se, at en runtime måske var den "rigtigste" løsning, men vi har forskellige begrænsninger på systemet, som gør, at vi ikke kan installere runtime, desværre.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.