vanuit access gegevens overbrengen naar Word en Excel

Status
Niet open voor verdere reacties.

annetiti

Gebruiker
Lid geworden
6 aug 2007
Berichten
195
Hallo

Probleem: hoe juist werken om gegevens uit Access naar verschillende word document overbrengen.

Ben een oude database aan het herschrijven. Er worden heel wat Word sjablonen gebruikt --> heel wat vaste gegevens staan in access. De gebruiker moet zelf tekst typen in het word document.

Vanuit access lukt het me om een nieuw word document te generen of een bestaand te openen afhankelijk van een leerling-id.(key)

-Access gegevens overbrengen naar het Word document. Hoe doe ik dit best?

wat me wel lukt is in word een macro schrijven --> in access herwerken --> Niet ideaal bij grote documenten.

Werk ik in word met een samengevoegde documenten? kan dit ook geautomatiseerd worden zodat de gebruiker geen samenvoegbewerking moet maken?
zijn er andere technieken?

Misschien krijg ik een goede tip! al op gegoogled maar ....

met vriendelijke groeten
Anne
 
Maak in Word gebruik van documentvariabelen.

met VBA geef je docuemntvariabelen zo een waarde:

Code:
For j=1 to 12
  activedocument.variables("var_" & j)="inhoud " & j
next
Activedocument.fields.update

Velden voor de documentvariabelen kunt je zovaak je wil en in iedere gewenste opmaak in het document plaatsen.
 
Hallo
bedankt om zo snel te antwoorden. Toch een kleine vraag:

Zijn documentvariabelen = formuliervelden in word --> tabblad ontwikkelaars --> besturingselementen?

groeten
anne
 
Nee. Variabelen zijn velen die je kunt vullen en oproepen in je document. Bij sjablonen die je vanuit Access vult zet je in je document REF velden die verwijzen naar de DocVars. En je ziet dus in Word de inhoud ervan in je document. Het vullen van de DocVariables kun je vanuit Access doen. Zo doe ik het althans.
 
VBA ACCESS word excel

Dag Octafish

Via bladwijzer en ref veld is het gelukt. In bijlage mail ik je bestandje vraagword --> fromulier frmsjabloon--> sjabloon Word --> heb het niet gelinkt met een tabel. Zou je even kunnen nazien of het de juiste techniek is?

Heb ook geprobeerd om access gegevens in een excel sjabloon te plaatsen. Maar heb problemen om het document op te slaan. (formulier sjabloon excel)

de vba is niet gelinkt met een tabel.

Hartelijk dank.

AnneBekijk bijlage vraagword.zip
 
Mij lijkt deze code voldoende voor de koppeling met Word, gecombineerd met de bijlage (zonder bladwijzers)

Code:
Private Sub CMDsjabloon_Click()
  c00 = CurrentProject.Path
  c01 = "\Sjabloontest_001"
    
  If Dir(c00 & c01 & ".docx") <> "" Then
    With GetObject(c00 & c01 & ".docx")
       .windows(1).Visible = True
        For Each fl In CurrentDb.OpenRecordset("tblpersoon").Fields
           .variables(fl.Name) = fl.Value
        Next
        .fields.update
    End With
  Else
    With GetObject(, "word.application").Documents.Add(c00 & c01 & ".dotx")
        For Each fl In CurrentDb.OpenRecordset("tblpersoon").Fields
           .variables(fl.Name) = fl.Value
        Next
        .Fields.Update
        .windows(1).Visible = True
    End With
  End If
End Sub
 

Bijlagen

Laatst bewerkt:
Dag snb
Het is me gelukt zoals je de code meegegeven hebt. Veel bijgeleerd. Kende het veld (docvariabele) niet. Hartelijk dank.
:thumb:
Zit nog met 1 probleem. Via access zou het word document moeten opgeslagen worden --> uniforme naam die in hulptabellen van acess staan.

Heb al geprobeerd met documents.saveas (naam bestand) maar krijg telkens de foutmelding --> wordt niet ondersteund. Kan je me nog een rugsteuntje geven. (dank)

Waar vinden jullie al deze functies?

Groeten Anne
 
Code:
activedocument.saveas2 "G:\OF\voorbeeld.docx"

vinden:

- macrorecorder
- VBEditor F1
- VBEditor F2
 
Laatst bewerkt:
Dag Snb
Hartelijk dank. Het werkt in mijn applicatie!
Je hebt me een flinke stap verdergezet.
groeten Anne

Heb je misschien ook een voorbeeld om gegevens van access in een cel weg te schrijven?
 
Of het nou een héél goed idee is om één specifieke helper te vragen om iets voor je te doen: ik vraag het me af.... Dan voelt het toch of je iets moois aan het verstoren bent. Kun je beter een persoonlijk mailtje sturen lijkt mij. Dus met enige schroom: kijk hier eens. Een heel uitgebreid voorbeeld. Daar kun je wel uithalen wat voor jou interessant is.
 
@Octa

Voor PM's moet je verenigingslid zijn.
Dus het forum verhindert jouw suggestie voor 'buitenstaanders'.
 
Sorry

Dag Octfish

Sorry hiervoor.

had de knop snel reageren gebruikt!

Bedankt voor je link, een heel mooi voorbeeld.
Moet nog veel kennis opdoen zowel in vba als in het gebruik van het forum.

groeten Annetiti
 
bijvoorbeeld met

Code:
Private Sub cmdexcel_Click()
   With CurrentDb.OpenRecordset("tblpersoon")
     sn = .GetRows(.RecordCount)
   End With
   
   With CreateObject("Excel.Application")
      .Visible = True
      With .workbooks.Add
          If UBound(sn, 2) = 0 Then
             .sheets(1).cells(1).Resize(, UBound(sn) + 1) = .Application.transpose(sn)
          Else
             .sheets(1).cells(1).Resize(UBound(sn, 2) + 1, UBound(sn) + 1) = .Application.transpose(sn)
          End If
      End With
   End With
End Sub

Maar omdat alle gegevens in array sn staan kun je naar willekeur hieruit putten om een werkblad te vullen.
 
Laatst bewerkt:
Hartelijk dank voor al de moeite! Niet gemakkelijk met een beginner! :d

hier en daar toch functie die ik onder de loep moet nemen .application.transpose(sn) --> wat doet dit?

Ga de code overnemen en eens nazien wat dit doet! Dit is geen makkie!

groeten Anne
 
transpose: maak van rijen kolommen en van kolommen rijen (= 90 graden draaien)
 
Laatst bewerkt:
Gelukkig kan het ook (hopelijk makkelijker te begrijpen en) simpeler, en wel met een Recordset:
Code:
Private Sub cmdExcel_Click()
Dim rst As ADODB.Recordset
    
    Set rst = New ADODB.Recordset
    With rst
        .Open "Bestanden_Uitgebreid", CurrentProject.Connection, adOpenKeyset, adLockPessimistic
        With CreateObject("Excel.Application")
            .Visible = True
            With .Workbooks.Add
                For i = 0 To rst.Fields.Count - 1
                    .Sheets(1).Cells(1, i + 1) = rst.Fields(i).Name
                    .Sheets(1).Cells(1, i + 1).Font.Bold = True
                Next i
                .Sheets(1).Cells(2, 1).CopyFromRecordset rst
            End With
        End With
    End With
End Sub
 
@Octa

Ik begrijp die code, maar is het niet wat vreemd om via een andere bibliotheek opnieuw verbinding te leggen met de database waarin je al bezig bent ?
Mij lijkt ADO nu juist geschikt vanuit bijv. Excel om verbinding te leggen met een database die nog niet open is.

Code:
Sub cmdExcel_Click()
   With CurrentDb.OpenRecordset("tblpersoon")
     sn = .GetRows(.RecordCount)
     ReDim sp(.Fields.Count)
     For j = 0 To .Fields.Count - 1
        sp(j) = .Fields(j).Name
     Next
   End With
   
   With CreateObject("Excel.Application")
      .Visible = True
      With .workbooks.Add.sheets(1).cells(1)
          .Resize(, UBound(sp)) = sp
          .Resize(, UBound(sp)).Font.Bold = -1
          .offset(1).Resize(UBound(sn, 2) + 1, UBound(sn) + 1) = .Application.transpose(sn)
      End With
   End With
End Sub
 
@snb:
Ik ga nog steeds uit vanuit de oorspronkelijke vraag van TS waarbij vanuit een Access database de bestanden naar Word en (nu ook) Excel moeten. Ik ga er dus vanuit dat TS een Access formulier op het scherm heeft en op een paar knoppen drukt. Aangezien jij meer vanuit Excel werkt, zal je eerder geneigd zijn de andere kant op te denken.
 
@Octa

Het tegendeel is het geval: mijn code staat in Access, als onderdeel van het formulier: zie Sub cmdExcel_Click(); en maakt daarbij gewoon gebruik van alle eigenschappen van de database zoals die via de Access VBA bibliotheek benaderd kunnen worden (dus niet met een externe ADODB-bibliotheek).

Maar mij lijkt onderstaande benadering - ook vanuit Access, ook vanuit hetzelfde formulier - voldoende:

Code:
Sub cmdExcel_Click()
   DoCmd.OutputTo 0, "tblpersoon", acFormatXLSX, "G:\OF\persoon.xlsx"
   GetObject("G:\OF\persoon.xlsx").windows(1).Visible = True
End Sub

Als je via Lint / External Date / (Export) Excel met de daar te starten wizard een Exportspecificatie voor tabel 'tblpersoon' hebt opgeslagen onder de naam 'E_persoon' is deze code al voldoende:

Code:
Sub cmdExcel_Click()
   DoCmd.RunSavedImportExport "E_persoon"
End Sub
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan