Avatar billede l3kris Nybegynder
16. august 2009 - 12:01 Der 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?

Jeg håber, at beskrivelsen er tydelig.
Avatar billede terry Ekspert
16. august 2009 - 12:24 #1
1: Yes
Avatar billede terry Ekspert
16. august 2009 - 12:29 #2
But in my opinion, neither word or Excel should be used to update your Access dB.

An idea would be to make a small frontend in Access runtime which could be used to update the database.
Avatar billede terry Ekspert
16. august 2009 - 12:29 #3
Using an Access runtime doesnt require a license for Access
Avatar billede Slettet bruger
16. august 2009 - 14:13 #4
Hvis i kan bruge det i allerede har i access til at afslutte opgaver, så skal de andre bare bruge en runtime, så kan de bruge det samme program!~)
Avatar billede l3kris Nybegynder
16. august 2009 - 14:52 #5
Ok, det giver svar på spørgsmål 1 (til Terry).

Det med at bruge en runtime skal jeg have forklare nærmere. Hvordan laver man sådan en, og hvordan kalder man den?
Avatar billede supertekst Ekspert
16. august 2009 - 15:03 #6
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
   
rem Opdater
        .Update
    End With
Avatar billede terry Ekspert
16. august 2009 - 15:07 #7
http://office.microsoft.com/en-us/access/HA011208861033.aspx

The person who has Access installed makes a database which updates (without code) a users tasks (opgave).

Access runtime and the dB gets installed on all PC's where the dB is to be used.


Answer to question 2:>> No code needed
Avatar billede l3kris Nybegynder
19. august 2009 - 19:15 #8
@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.
Avatar billede supertekst Ekspert
19. august 2009 - 19:52 #9
Ja - det er korrekt. Det er et udrag - derfor "smuttede" indledningen - f.eks.:

          With Tools.periodeAktiv
            .AddNew
            .Fields(1) = knr
            .Fields(2) = rÅr
            .Fields(3) = aNr
          End With

hvor Tools.periodeAktiv er en tabel i DB'en.

I det efterfølgende erstatter "det indledende punktum" således "tools.periodeAktiv"
Avatar billede l3kris Nybegynder
21. august 2009 - 18:15 #10
Tak for hjælpen, supertekst - jeg har fået det til at virke nu. Lægger du et svar?
Avatar billede supertekst Ekspert
21. august 2009 - 18:52 #11
Selv tak - fint du fik styr på det...
Avatar billede Ny bruger Nybegynder

Din løsning...

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.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester