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?
I dette særtema ser vi på, hvordan cloud og AI bliver fundamentet for virksomhedernes digitale forretning, og hvordan de nye muligheder for automatisering og forretningsværdi kan udnyttes uden at miste overblik, sikkerhed og menneskelig kontrol.
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.