Avatar billede Slettet bruger
03. november 2011 - 18:46 Der er 27 kommentarer og
1 løsning

VBA overføre oplysninger fra database

Hej Eksperter

Jeg sider og roder med nogle VBA koder i et Word skabelon og vil defor høre om det er mulig at få VBA til at henter oplysninger fra Access database?

Det jeg gerne vil kunne, er når jeg indtaster initialer i en TeksBox så bliver peronen i en Access database fundet og persones navn, stilig, telefon nr og mail bliver overført til word bogmærker.

Er ny i VBA verden, så håber i forstår hvad jeg mener.
Avatar billede supertekst Ekspert
03. november 2011 - 23:03 #1
Skulle ikke være umuligt - vil prøve at finde et eksempel.

Hvilken office-version?
Avatar billede Slettet bruger
04. november 2011 - 14:53 #2
Hej supertekst

Offies office-version er 2007.
Avatar billede supertekst Ekspert
04. november 2011 - 15:14 #3
Hej parker

Do. version her. Nævnte Tekstboks - er det i en Userform eller ??
Avatar billede Slettet bruger
04. november 2011 - 15:41 #4
Hej supertekst

Tekstboks er i en UserForm som  liger i Word skabelonen
Avatar billede supertekst Ekspert
04. november 2011 - 16:09 #5
Initialer, der indtastes: er det primærnøglen eller anden nøgle i den relevante tabel. Hvis sidstnævnte - hvilket navn?
Avatar billede Slettet bruger
04. november 2011 - 16:41 #6
Hej supertekst

Den primærnøgl i min Access database er ID som Access selv har lavet.

Koloen hvor Initialerne så hedder "Initialer"
Avatar billede supertekst Ekspert
04. november 2011 - 17:31 #7
Altså ikke noget indeks på Initialer - det er heller kke et problem
Avatar billede Slettet bruger
04. november 2011 - 17:46 #8
Jeg er ikke helt med på hvad indeks er???

Men følgende kolonder er der i database (i rækkefølge)

Id - "Access selv har lavet"
MA nr - "Medarbejdernummer"
Initialer - "Medarbejderes Initialer"
Navn - "Medarbejderes navn"
Stilling - "Medarbejderes stilling"
Mail - "Medarbejderes mailadresse"
Tel - "Medarbejderes telefon nr"

Hver medarbejder har et "MA nr" som er unik for hver person, kan dette bruges??
Avatar billede supertekst Ekspert
04. november 2011 - 17:57 #9
Så kan man direkte søge på det felt - men det er ikke noget problem.

Jeg søger på initialer og returnerer nummer og navn i userformen - de øvrige felter kan du selv tilføje.

Hvor mange medarbejdere er der tale om?
Avatar billede Slettet bruger
04. november 2011 - 18:08 #10
Okay super.

Jeg vil tro der er ca 10 medarbejdere men gider det problemer hvis der kommer flere?????
Avatar billede supertekst Ekspert
04. november 2011 - 18:19 #11
Intet problem er her koden:

Rem Reference til Microsoft Office 12.0 Access database engine object er sat
Rem VBA-vindue (Alt+F11) / Tools (værktøjslinje) / References
Rem =======================================================================
Const dataBaseNavn = "Medarbejder.accDB"
Rem database & tabeller
Dim db, medarbejder
Dim sti As String
Private Sub Tb_initialer_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Me.Tb_initialer <> "" Then
        hentMedarbejderdata Me.Tb_initialer
        db.Close
    End If
End Sub
Private Sub hentMedarbejderdata(initialer)
    Set db = OpenDatabase(sti & dataBaseNavn)
   
    Set medarbejder = db.OpenRecordset("medarbejder")
   
    With medarbejder
        For r = 1 To medarbejder.RecordCount
            If LCase(initialer) = LCase(.Fields(2)) Then
                Me.Tb_navn = .Fields(3)
                Me.Tb_nummer = CStr(.Fields(1))
                medarbejder.Close
                Exit Sub
            End If
            .MoveNext
        Next r
    End With
   
    medarbejder.Close
End Sub
Private Sub userform_activate()
    sti = ActiveDocument.Path
    If Right(sti, 1) <> "\" Then
        sti = sti & "\"
    End If
End Sub
Avatar billede supertekst Ekspert
04. november 2011 - 18:19 #12
Hvis du er interesseret kan du få hele min model,
Send en mail - @-adresse under min profil.
Avatar billede Slettet bruger
04. november 2011 - 18:44 #13
Hej

Er det rigtig forstået at Databasen skal lige samme sted som Word skabelonen - Jeg kan kun få det til at virke sådan.

Er det mulig at lave det sådan at Databasen og skabelonen ikke behøves at ligge i samme mappe?

Jeg er hæller ikke med på hvordan f.eks Navn bliver overført til et bogmærker i word?

Men jeg kan gå for den til at skrive det i din teksbox :o)
Avatar billede supertekst Ekspert
04. november 2011 - 23:00 #14
Du skal blot ændre stien til databasen - altså skrive den rigtig mellem "'erne: Set db = OpenDatabase("databasesti" & dataBaseNavn)

Eks på sub, der kan kaldes til indsættelse af en værdi:

Private Sub indsætBogmærke(bogMærkeNavn, tekst)
    ActiveDocument.Bookmarks(bogMærkeNavn).Select
    Selection.TypeText Text:=tekst
End Sub
Avatar billede Slettet bruger
05. november 2011 - 09:03 #15
Jeg tro jeg har fundet ud af det, med stien til databasen


Det ikke se sådan ud, ikke?:

Private Sub userform_activate()
    sti = ActiveDocument.Path
    If Right(sti, 1) <> "\" Then
        sti = "C:\Users\Parker-1\Documents\Dokumentskabeloner" & "\"
    End If
End Sub

Det med bogmærker tro jeg vi har misforstået hinanden.
Det jeg gerne vil kunne er at oplysninger fra databasen for personen dirikte overføres til bogmærker i word når man har trykket på en CommandButton. og ikke som nu hvor de bliver overført til TextBox.


Håber det forklare det bedre
Avatar billede supertekst Ekspert
05. november 2011 - 10:30 #16
Nej - det forstod jeg godt.

Vist dig også et eksempel:

    ActiveDocument.Bookmarks(bogMærkeNavn).Select
    Selection.TypeText Text:=tekst

Det kan du jo "fyre af" direkte fra userformen.
Avatar billede Slettet bruger
05. november 2011 - 11:25 #17
okay så er det nok mig der ikke forstår det :o)

Du skriver at jeg kan bruge den kode

Private Sub indsætBogmærke(bogMærkeNavn, tekst)
    ActiveDocument.Bookmarks(bogMærkeNavn).Select
    Selection.TypeText Text:=tekst
End Sub

Men jeg ikke med på hvordan du fortæller at ex Navn fra database bliver overfør til bogmærker (txtnavn)

Du må lige bære over med mig, jeg har ikke prøve VBA så mig - men øvelse gør mester , håber jeg på :o)
Avatar billede supertekst Ekspert
05. november 2011 - 17:17 #18
Nu med bogmærker:

Rem Reference til Microsoft Office 12.0 Access database engine object er sat
Rem VBA-vindue (Alt+F11) / Tools (værktøjslinje) / References
Rem =======================================================================
Const dataBaseNavn = "Medarbejder.accDB"
Rem database & tabeller
Dim db, medarbejder
Dim sti As String
Private Sub Tb_initialer_Exit(ByVal Cancel As MSForms.ReturnBoolean)
    If Me.Tb_initialer <> "" Then
        hentMedarbejderdata Me.Tb_initialer
        db.Close
    End If
End Sub
Private Sub hentMedarbejderdata(initialer)
    Set db = OpenDatabase(sti & dataBaseNavn)
   
    Set medarbejder = db.OpenRecordset("medarbejder")
   
    With medarbejder
        For r = 1 To medarbejder.RecordCount
            If LCase(initialer) = LCase(.Fields(2)) Then
                Me.Tb_navn = .Fields(3)
                Me.Tb_nummer = CStr(.Fields(1))
                medarbejder.Close
               
Rem Indsæt bogmærker
                indsætBogmærke "nr", Me.Tb_nummer
                indsætBogmærke "navn", Me.Tb_navn
                Exit Sub
            End If
            .MoveNext
        Next r
    End With
   
    medarbejder.Close
End Sub
Private Sub userform_activate()
    sti = ActiveDocument.Path
    If Right(sti, 1) <> "\" Then
        sti = sti & "\"
    End If
End Sub
Private Sub indsætBogmærke(bm, tekst)
    With ActiveDocument
        .Bookmarks(bm).Select
        Selection.TypeText Text:=CStr(tekst)
    End With
End Sub
Avatar billede Slettet bruger
05. november 2011 - 17:41 #19
Hej supertekst

1000 Tak men der sker fejl i føjgene

Private Sub indsætBogmærke(bm, tekst)
    With ActiveDocument
        .Bookmarks(bm).Select
        Selection.TypeText Text:=CStr(tekst)
    End With
End Sub

Er det rigtig forstået at der også blive sat bogmærker ind i word?
Avatar billede supertekst Ekspert
05. november 2011 - 17:52 #20
Du skal selv oprette bogmærkerne....

I mit eksempel er der oprettet bogmærkerne nr og navn:

Rem Indsæt i bogmærkerne
                indsætBogmærke "nr", Me.Tb_nummer
                indsætBogmærke "navn", Me.Tb_navn
Avatar billede Slettet bruger
05. november 2011 - 18:04 #21
Okay nu fik jeg det til at virke.

men kan jeg så bare slette textboxne: Tb_navn og Tb_nummer da jeg ikke vil have den i min UserForm, eller skal de være dig???
Avatar billede supertekst Ekspert
05. november 2011 - 18:10 #22
Nej - så overføre du blot direkte fra tabelfeltet til bogmærket.
Avatar billede Slettet bruger
05. november 2011 - 18:24 #23
okay men jeghar ikke bruge for de textbox i min userform og jeg vil også først overfør den til bogmærkerne når jeg trykker på en CommandButton

Du skal nok få ekstra point hvis bare du gider at hjælp mig i mål, så jeg kan forstå det, håber på at du vil hjælpe mig
Avatar billede supertekst Ekspert
05. november 2011 - 20:39 #24
Vender tilbage søndag..
Avatar billede supertekst Ekspert
08. november 2011 - 22:59 #25
Skulle vi ikke få afsluttet?
Avatar billede Slettet bruger
09. november 2011 - 19:28 #26
Løsning fra supertekst:

Const dataBaseNavn = "Medarbejderliste.accDB"
Rem database & tabeller
Dim db, medarbejder
Dim sti As String
Private Sub CommandButton1_Click()
    If Me.Tb_initialer <> "" Then
        hentMedarbejderdata Me.Tb_initialer
    End If
End Sub
Private Sub userform_activate()
    sti = ActiveDocument.Path
    If Right(sti, 1) <> "\" Then
        sti = sti & "\"
    End If
End Sub
Private Sub indsætBogmærke(bm, tekst)
    With ActiveDocument
        .Bookmarks(bm).Select
        Selection.TypeText Text:=CStr(tekst)
    End With
End Sub
Private Sub hentMedarbejderdata(initialer)
    Set db = OpenDatabase(sti & dataBaseNavn)
   
    Set medarbejder = db.OpenRecordset("MA_liste")
   
    With medarbejder
        For r = 1 To medarbejder.RecordCount
            If LCase(initialer) = LCase(.Fields(2)) Then
                indsætBogmærke "nr", CStr(.Fields(1))
                indsætBogmærke "navn", .Fields(3)
                Rem... o.s.v.
                Rem...
               
                medarbejder.Close
                Exit Sub
            End If
            .MoveNext
        Next r
    End With
   
    medarbejder.Close
    db.Close
End Sub
Avatar billede Slettet bruger
09. november 2011 - 19:31 #27
Hej Supertekst

Du bliver nøde til at lave et svar til så jeg kan give dig 200 point da man åben baret ikke kan give mere en 100 point af gangen :o(
Avatar billede supertekst Ekspert
09. november 2011 - 22:48 #28
Det er ok med 100 point!

Jeg kan ikke lægge flere svar, da du har afsluttet med accepter. I givet fald skulle du så oprette et helt nyt spørgsmål stilet til mig med henvisning til det oprindelige - hvis du skulle få brug for det en anden gang.
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
Kategori
Kurser inden for grundlæggende programmering

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